From 348d33802fbc78cb870dd2ce291f5b88a4ccb588 Mon Sep 17 00:00:00 2001 From: Devin French Date: Mon, 9 Oct 2017 18:18:00 -0700 Subject: [PATCH] Add fight cave plugin --- .../java/net/runelite/api/AnimationID.java | 4 + .../main/java/net/runelite/api/Client.java | 3 + .../net/runelite/api/widgets/WidgetID.java | 34 ++++ .../net/runelite/api/widgets/WidgetInfo.java | 7 +- .../client/plugins/PluginManager.java | 2 + .../client/plugins/fightcave/FightCave.java | 105 ++++++++++++ .../plugins/fightcave/FightCaveOverlay.java | 162 ++++++++++++++++++ .../client/plugins/fightcave/JadAttack.java | 61 +++++++ .../grounditems/GroundItemsOverlay.java | 15 +- .../resources/prayers/protect_from_magic.png | Bin 0 -> 254 bytes .../prayers/protect_from_missiles.png | Bin 0 -> 220 bytes .../net/runelite/mixins/RSClientMixin.java | 18 ++ 12 files changed, 395 insertions(+), 16 deletions(-) create mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/fightcave/FightCave.java create mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/fightcave/FightCaveOverlay.java create mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/fightcave/JadAttack.java create mode 100644 runelite-client/src/main/resources/prayers/protect_from_magic.png create mode 100644 runelite-client/src/main/resources/prayers/protect_from_missiles.png diff --git a/runelite-api/src/main/java/net/runelite/api/AnimationID.java b/runelite-api/src/main/java/net/runelite/api/AnimationID.java index 398eecfb91..908bff5d78 100644 --- a/runelite-api/src/main/java/net/runelite/api/AnimationID.java +++ b/runelite-api/src/main/java/net/runelite/api/AnimationID.java @@ -92,4 +92,8 @@ public final class AnimationID public static final int MINING_MOTHERLODE_INFERNAL = 0; // placeholder, unknown public static final int HERBLORE_POTIONMAKING = 363; //used for both herb and secondary public static final int MAGIC_CHARGING_ORBS = 726; + + // NPC animations + public static final int TZTOK_JAD_MAGIC_ATTACK = 2656; + public static final int TZTOK_JAD_RANGE_ATTACK = 2652; } diff --git a/runelite-api/src/main/java/net/runelite/api/Client.java b/runelite-api/src/main/java/net/runelite/api/Client.java index 29f8dae718..4fc0104c66 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -25,6 +25,7 @@ package net.runelite.api; import java.awt.Canvas; + import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; @@ -143,4 +144,6 @@ public interface Client void setGameDrawingMode(int gameDrawingMode); void refreshChat(); + + Widget getViewportWidget(); } diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java index 4c1a0eab20..ac1a189167 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java @@ -37,6 +37,7 @@ class WidgetID static final int FIXED_VIEWPORT_GROUP_ID = 548; static final int RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID = 161; static final int RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID = 164; + static final int PRAYER_GROUP_ID = 541; static class PestControl { @@ -102,4 +103,37 @@ class WidgetID static final int RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX = 12; static final int RESIZABLE_VIEWPORT_BOTTOM_LINE = 12; } + + static class Prayer + { + static final int THICK_SKIN = 4; + static final int BURST_OF_STRENGTH = 5; + static final int CLARITY_OF_THOUGHT = 6; + static final int SHARP_EYE = 22; + static final int MYSTIC_WILL = 23; + static final int ROCK_SKIN = 7; + static final int SUPERHUMAN_STRENGTH = 8; + static final int IMPROVED_REFLEXES = 9; + static final int RAPID_RESTORE = 10; + static final int RAPID_HEAL = 11; + static final int PROTECT_ITEM = 12; + static final int HAWK_EYE = 24; + static final int MYSTIC_LORE = 25; + static final int STEEL_SKIN = 13; + static final int ULTIMATE_STRENGTH = 14; + static final int INCREDIBLE_REFLEXES = 15; + static final int PROTECT_FROM_MAGIC = 16; + static final int PROTECT_FROM_MISSILES = 17; + static final int PROTECT_FROM_MELEE = 18; + static final int EAGLE_EYE = 26; + static final int MYSTIC_MIGHT = 27; + static final int RETRIBUTION = 19; + static final int REDEMPTION = 20; + static final int SMITE = 21; + static final int PRESERVE = 32; + static final int CHIVALRY = 28; + static final int PIETY = 29; + static final int RIGOUR = 30; + static final int AUGURY = 31; + } } diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java index 145b48fe18..5246261639 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java @@ -71,13 +71,16 @@ public enum WidgetInfo FIXED_VIEWPORT(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.Viewport.FIXED_VIEWPORT), RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.Viewport.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX), - RESIZABLE_VIEWPORT_BOTTOM_LINE(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.Viewport.RESIZABLE_VIEWPORT_BOTTOM_LINE); + RESIZABLE_VIEWPORT_BOTTOM_LINE(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.Viewport.RESIZABLE_VIEWPORT_BOTTOM_LINE), + + PRAYER_PROTECT_FROM_MAGIC(WidgetID.PRAYER_GROUP_ID, WidgetID.Prayer.PROTECT_FROM_MAGIC), + PRAYER_PROTECT_FROM_MISSILES(WidgetID.PRAYER_GROUP_ID, WidgetID.Prayer.PROTECT_FROM_MISSILES); private final int groupId; private final int childId; - private WidgetInfo(int groupId, int childId) + WidgetInfo(int groupId, int childId) { this.groupId = groupId; this.childId = childId; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java b/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java index 4b7e2b672a..a1c5c50e46 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java @@ -43,6 +43,7 @@ import net.runelite.client.plugins.combatnotifier.CombatNotifier; import net.runelite.client.plugins.config.ConfigPlugin; import net.runelite.client.plugins.devtools.DevTools; import net.runelite.client.plugins.examine.ExaminePlugin; +import net.runelite.client.plugins.fightcave.FightCave; import net.runelite.client.plugins.fishing.FishingPlugin; import net.runelite.client.plugins.fpsinfo.FPS; import net.runelite.client.plugins.grounditems.GroundItems; @@ -111,6 +112,7 @@ public class PluginManager plugins.add(new ClueScrollPlugin()); plugins.add(new Timers()); plugins.add(new Runepouch()); + plugins.add(new FightCave()); if (RuneLite.getOptions().has("developer-mode")) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/FightCave.java b/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/FightCave.java new file mode 100644 index 0000000000..f9ec066d75 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/FightCave.java @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2017, Devin French + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.plugins.fightcave; + +import net.runelite.api.Client; +import net.runelite.api.GameState; +import net.runelite.api.NPC; +import net.runelite.api.Query; +import net.runelite.api.queries.NPCQuery; +import net.runelite.client.RuneLite; +import net.runelite.client.plugins.Plugin; +import net.runelite.client.task.Schedule; +import net.runelite.client.ui.overlay.Overlay; + +import java.time.temporal.ChronoUnit; + +public class FightCave extends Plugin +{ + private final RuneLite runelite = RuneLite.getRunelite(); + private final Client client = RuneLite.getClient(); + private final FightCaveOverlay overlay = new FightCaveOverlay(this); + + private JadAttack attack; + + @Override + public Overlay getOverlay() + { + return overlay; + } + + @Override + protected void startUp() throws Exception + { + + } + + @Override + protected void shutDown() throws Exception + { + + } + + @Schedule( + period = 600, + unit = ChronoUnit.MILLIS + ) + public void update() + { + if (client == null || client.getGameState() != GameState.LOGGED_IN) + { + return; + } + + NPC jad = findJad(); + if (jad != null) + { + if (jad.getAnimation() == JadAttack.MAGIC.getAnimation()) + { + attack = JadAttack.MAGIC; + } + else if (jad.getAnimation() == JadAttack.RANGE.getAnimation()) + { + attack = JadAttack.RANGE; + } + } + else + { + attack = null; + } + } + + private NPC findJad() + { + Query query = new NPCQuery().nameContains("TzTok-Jad"); + NPC[] result = runelite.runQuery(query); + return result.length >= 1 ? result[0] : null; + } + + JadAttack getAttack() + { + return attack; + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/FightCaveOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/FightCaveOverlay.java new file mode 100644 index 0000000000..57ef774ae8 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/FightCaveOverlay.java @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2017, Devin French + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.plugins.fightcave; + +import net.runelite.api.Client; +import net.runelite.api.widgets.Widget; +import net.runelite.client.RuneLite; +import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayPosition; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.imageio.ImageIO; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.FontMetrics; +import java.awt.Graphics2D; +import java.awt.Image; +import java.awt.Rectangle; +import java.io.IOException; +import java.io.InputStream; + +public class FightCaveOverlay extends Overlay +{ + private static final int WIDTH = 70; + private static final int SPACER = 6; + private static final int BOTTOM_BORDER = 4; + private static final Color GREEN_BACKGROUND = new Color(0, 255, 0, 100); + private static final Color RED_BACKGROUND = new Color(255, 0, 0, 100); + + private static final Logger logger = LoggerFactory.getLogger(FightCaveOverlay.class); + + private final FightCave plugin; + private final Client client = RuneLite.getClient(); + private Image protectFromMagicImg; + private Image protectFromMissilesImg; + + FightCaveOverlay(FightCave plugin) + { + super(OverlayPosition.DYNAMIC); + this.plugin = plugin; + } + + @Override + public Dimension render(Graphics2D graphics) + { + JadAttack attack = plugin.getAttack(); + Rectangle viewport = getViewportBounds(); + if (attack == null || viewport == null) + { + return null; + } + + Image img = getPrayerImage(attack); + if (img == null) + { + return null; + } + + Color bgColor; + Color outlineColor; + Widget prayer = client.getWidget(attack.getPrayerWidgetInfo()); + FontMetrics fm = graphics.getFontMetrics(); + int height = fm.getHeight() + img.getHeight(null) + SPACER + BOTTOM_BORDER; + + if (client.isPrayerActive(attack.getPrayer())) + { + bgColor = GREEN_BACKGROUND; + outlineColor = Color.GREEN.darker(); + } + else + { + bgColor = RED_BACKGROUND; + outlineColor = Color.RED.darker(); + } + + int bgX = (int) (viewport.getX() + viewport.getWidth() - WIDTH); + int bgY = (int) (viewport.getY() + viewport.getHeight() - height); + graphics.setColor(bgColor); + graphics.fillRect(bgX, bgY, WIDTH, height); + + if (prayer != null) + { + graphics.setColor(outlineColor); + graphics.draw(prayer.getBounds()); + } + + graphics.setColor(Color.WHITE); + graphics.drawString("TzTok-Jad", bgX + (WIDTH - fm.stringWidth("TzTok-Jad")) / 2, bgY + fm.getHeight()); + graphics.drawImage(img, bgX + (WIDTH - img.getWidth(null)) / 2, bgY + fm.getHeight() + SPACER, null); + + return null; + } + + private Rectangle getViewportBounds() + { + Widget viewport = client.getViewportWidget(); + return viewport != null ? viewport.getBounds() : null; + } + + private Image getPrayerImage(JadAttack attack) + { + return attack == JadAttack.MAGIC ? getProtectFromMagicImage() : getProtectFromMissilesImage(); + } + + private Image getProtectFromMagicImage() + { + if (protectFromMagicImg == null) + { + String path = "/prayers/protect_from_magic.png"; + protectFromMagicImg = getImage(path); + } + return protectFromMagicImg; + } + + private Image getProtectFromMissilesImage() + { + if (protectFromMissilesImg == null) + { + String path = "/prayers/protect_from_missiles.png"; + protectFromMissilesImg = getImage(path); + } + return protectFromMissilesImg; + } + + private Image getImage(String path) + { + Image image = null; + try + { + InputStream in = FightCaveOverlay.class.getResourceAsStream(path); + image = ImageIO.read(in); + } + catch (IOException e) + { + logger.warn("Error loading image", e); + } + return image; + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/JadAttack.java b/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/JadAttack.java new file mode 100644 index 0000000000..a40d40feee --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/JadAttack.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2017, Devin French + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.plugins.fightcave; + +import net.runelite.api.AnimationID; +import net.runelite.api.Prayer; +import net.runelite.api.widgets.WidgetInfo; + +public enum JadAttack +{ + MAGIC(AnimationID.TZTOK_JAD_MAGIC_ATTACK, Prayer.PROTECT_FROM_MAGIC, WidgetInfo.PRAYER_PROTECT_FROM_MAGIC), + RANGE(AnimationID.TZTOK_JAD_RANGE_ATTACK, Prayer.PROTECT_FROM_MISSILES, WidgetInfo.PRAYER_PROTECT_FROM_MISSILES); + + private final int animation; + private final Prayer prayer; + private final WidgetInfo prayerWidgetInfo; + + JadAttack(int animation, Prayer prayer, WidgetInfo prayerWidgetInfo) + { + this.animation = animation; + this.prayer = prayer; + this.prayerWidgetInfo = prayerWidgetInfo; + } + + public int getAnimation() + { + return animation; + } + + public Prayer getPrayer() + { + return prayer; + } + + public WidgetInfo getPrayerWidgetInfo() + { + return prayerWidgetInfo; + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java index 6d63703344..452e772f38 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java @@ -49,7 +49,6 @@ import net.runelite.api.Player; import net.runelite.api.Point; import net.runelite.api.Region; import net.runelite.api.Tile; -import net.runelite.api.Varbits; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.game.ItemManager; @@ -124,19 +123,7 @@ public class GroundItemsOverlay extends Overlay return null; } - WidgetInfo viewportInfo = WidgetInfo.FIXED_VIEWPORT; - if (client.isResized()) - { - if (client.getSetting(Varbits.SIDE_PANELS) == 1) - { - viewportInfo = WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE; - } - else - { - viewportInfo = WidgetInfo.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX; - } - } - Widget viewport = client.getWidget(viewportInfo); + Widget viewport = client.getViewportWidget(); if (viewport != null) { diff --git a/runelite-client/src/main/resources/prayers/protect_from_magic.png b/runelite-client/src/main/resources/prayers/protect_from_magic.png new file mode 100644 index 0000000000000000000000000000000000000000..b71e1d395f683ca6150ae39b926c29d074e1555a GIT binary patch literal 254 zcmV8GPN`dnpChx$8M{uAowI;xEI0b!SxPD#W9s{jB107*qoM6N<$ Eg4{1=YybcN literal 0 HcmV?d00001 diff --git a/runelite-client/src/main/resources/prayers/protect_from_missiles.png b/runelite-client/src/main/resources/prayers/protect_from_missiles.png new file mode 100644 index 0000000000000000000000000000000000000000..210e0ff6d639b57de416f970b83b1573e2abd54b GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gji#=T&Ln>}1CoEtvFf#aayiIZi zV?x{7lD&Z)Rv&8D{;EOR4Kragx$ZHBpPTvlJLQZY}t? UbQRlWpmP~KUHx3vIVCg!02zE#GXMYp literal 0 HcmV?d00001 diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java index 866b81bb71..4f83b7287a 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -222,4 +222,22 @@ public abstract class RSClientMixin implements RSClient { setChatCycle(getCycleCntr()); } + + @Inject + @Override + public Widget getViewportWidget() + { + if (isResized()) + { + if (getSetting(Varbits.SIDE_PANELS) == 1) + { + return getWidget(WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE); + } + else + { + return getWidget(WidgetInfo.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX); + } + } + return getWidget(WidgetInfo.FIXED_VIEWPORT); + } }