diff --git a/runelite-api/src/main/java/net/runelite/api/ItemDefinition.java b/runelite-api/src/main/java/net/runelite/api/ItemDefinition.java index d215589a07..3bfd527493 100644 --- a/runelite-api/src/main/java/net/runelite/api/ItemDefinition.java +++ b/runelite-api/src/main/java/net/runelite/api/ItemDefinition.java @@ -75,6 +75,14 @@ public interface ItemDefinition */ int getPrice(); + /** + * Get the high alchemy price for this item. All items have a high alchemy price, + * but not all items can be alched. + * + * @return the high alch price + */ + int getHaPrice(); + /** * Checks whether the item is members only. * diff --git a/runelite-api/src/main/java/net/runelite/api/PlayerAppearance.java b/runelite-api/src/main/java/net/runelite/api/PlayerAppearance.java index 2348968eda..c700ee8c3f 100644 --- a/runelite-api/src/main/java/net/runelite/api/PlayerAppearance.java +++ b/runelite-api/src/main/java/net/runelite/api/PlayerAppearance.java @@ -31,6 +31,13 @@ import net.runelite.api.kit.KitType; */ public interface PlayerAppearance { + /** + * Checks if the player is female. + * + * @return true if the player is female + */ + boolean isFemale(); + /** * Gets an array of IDs related to equipment slots. *

diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLite.java b/runelite-client/src/main/java/net/runelite/client/RuneLite.java index 3cdaf570e4..c3ba022e05 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLite.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLite.java @@ -44,6 +44,10 @@ import java.net.Authenticator; import java.net.PasswordAuthentication; import java.nio.charset.StandardCharsets; import java.nio.file.Paths; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.security.cert.X509Certificate; import java.util.Locale; import java.util.Map; import java.util.Optional; @@ -52,6 +56,9 @@ import java.util.UUID; import javax.annotation.Nullable; import javax.inject.Provider; import javax.inject.Singleton; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; import joptsimple.ArgumentAcceptingOptionSpec; import joptsimple.OptionException; import joptsimple.OptionParser; @@ -372,9 +379,16 @@ public class RuneLite log.error("Unable to load settings", ex); } - final OkHttpClient okHttpClient = RuneLiteAPI.CLIENT.newBuilder() - .cache(new Cache(new File(CACHE_DIR, "okhttp"), MAX_OKHTTP_CACHE_SIZE)) - .build(); + final OkHttpClient.Builder okHttpClientBuilder = RuneLiteAPI.CLIENT.newBuilder() + .cache(new Cache(new File(CACHE_DIR, "okhttp"), MAX_OKHTTP_CACHE_SIZE)); + + final boolean insecureSkipTlsVerification = options.has("insecure-skip-tls-verification"); + if (insecureSkipTlsVerification) + { + setupInsecureTrustManager(okHttpClientBuilder); + } + + final OkHttpClient okHttpClient = okHttpClientBuilder.build(); final ClientLoader clientLoader = new ClientLoader(okHttpClient, options.valueOf(updateMode)); Completable.fromAction(clientLoader::get) @@ -668,4 +682,37 @@ public class RuneLite return f; } } + + private static void setupInsecureTrustManager(OkHttpClient.Builder okHttpClientBuilder) + { + try + { + X509TrustManager trustManager = new X509TrustManager() + { + @Override + public void checkClientTrusted(X509Certificate[] chain, String authType) + { + } + + @Override + public void checkServerTrusted(X509Certificate[] chain, String authType) + { + } + + @Override + public X509Certificate[] getAcceptedIssuers() + { + return new X509Certificate[0]; + } + }; + + SSLContext sc = SSLContext.getInstance("SSL"); + sc.init(null, new TrustManager[]{trustManager}, new SecureRandom()); + okHttpClientBuilder.sslSocketFactory(sc.getSocketFactory(), trustManager); + } + catch (NoSuchAlgorithmException | KeyManagementException ex) + { + log.warn("unable to setup insecure trust manager", ex); + } + } } diff --git a/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java b/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java index 24ece9a377..888531ed6f 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java +++ b/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java @@ -48,7 +48,6 @@ import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.api.Constants; import static net.runelite.api.Constants.CLIENT_DEFAULT_ZOOM; -import static net.runelite.api.Constants.HIGH_ALCHEMY_MULTIPLIER; import net.runelite.api.GameState; import net.runelite.api.ItemDefinition; import net.runelite.api.ItemID; @@ -340,7 +339,7 @@ public class ItemManager return 1000; } - return (int) Math.max(1, composition.getPrice() * HIGH_ALCHEMY_MULTIPLIER); + return Math.max(1, composition.getHaPrice()); } public int getAlchValue(int itemID) @@ -354,7 +353,7 @@ public class ItemManager return 1000; } - return (int) Math.max(1, getItemDefinition(itemID).getPrice() * HIGH_ALCHEMY_MULTIPLIER); + return Math.max(1, getItemDefinition(itemID).getHaPrice()); } public int getRepairValue(int itemId) diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSItemDefinitionMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSItemDefinitionMixin.java index b0d67ee943..fc1d84f24d 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSItemDefinitionMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSItemDefinitionMixin.java @@ -89,4 +89,12 @@ public abstract class RSItemDefinitionMixin implements RSItemDefinition return client.getRSItemDefinition(modelOverride).getModel(quantity); } + + @Inject + @Override + public int getHaPrice() + { + int price = getPrice(); + return (int) ((float) price * 0.6f); + } }