diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSLinkDequeMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSLinkDequeMixin.java index 1ab3935574..70448db66d 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSLinkDequeMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSLinkDequeMixin.java @@ -32,6 +32,23 @@ import net.runelite.rs.api.RSLinkDeque; @Mixin(RSLinkDeque.class) public abstract class RSLinkDequeMixin implements RSLinkDeque { + @Inject + @Override + public void addLast(Object o) + { + RSLink var1 = (RSLink) o; + + if (var1.getNext() != null) + { + var1.remove(); + } + + var1.setNext(this.getSentinel()); + var1.setPrevious(this.getSentinel().getPrevious()); + var1.getNext().setPrevious(var1); + var1.getPrevious().setNext(var1); + } + @Inject @Override public void clear() diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSNodeDequeMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSNodeDequeMixin.java new file mode 100644 index 0000000000..db22beb887 --- /dev/null +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSNodeDequeMixin.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2016-2017, Adam + * 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.mixins; + +import net.runelite.api.mixins.Inject; +import net.runelite.api.mixins.Mixin; +import net.runelite.rs.api.RSNode; +import net.runelite.rs.api.RSNodeDeque; + +@Mixin(RSNodeDeque.class) +public abstract class RSNodeDequeMixin implements RSNodeDeque +{ + @Inject + @Override + public void addLast(Object o) + { + RSNode var1 = (RSNode) o; + + if (var1.getNext() != null) + { + var1.unlink(); + } + + var1.setNext(this.getSentinel()); + var1.setPrevious(this.getSentinel().getPrevious()); + var1.getNext().setPrevious(var1); + var1.getPrevious().setNext(var1); + } +} \ No newline at end of file diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSLink.java b/runescape-api/src/main/java/net/runelite/rs/api/RSLink.java index 800b172b12..901ff570f1 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSLink.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSLink.java @@ -7,9 +7,18 @@ public interface RSLink @Import("previous") RSLink getPrevious(); + @Import("previous") + void setPrevious(RSLink var1); + @Import("next") RSLink next(); + @Import("next") + RSLink getNext(); + + @Import("next") + void setNext(RSLink var1); + @Import("remove") void remove(); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSNode.java b/runescape-api/src/main/java/net/runelite/rs/api/RSNode.java index ddb124464d..590a805e40 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSNode.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSNode.java @@ -33,14 +33,20 @@ public interface RSNode extends Node @Override RSNode getNext(); - @Import("key") - @Override - long getHash(); + @Import("previous") + void setNext(RSNode var1); @Import("next") @Override RSNode getPrevious(); + @Import("next") + void setPrevious(RSNode var1); + + @Import("key") + @Override + long getHash(); + @Import("remove") void unlink(); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSNodeDeque.java b/runescape-api/src/main/java/net/runelite/rs/api/RSNodeDeque.java index 7411f0b19c..0661a11bd0 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSNodeDeque.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSNodeDeque.java @@ -44,6 +44,9 @@ public interface RSNodeDeque extends Deque @Import("addFirst") void addFirst(RSNode val); + @Import("addLast") + void addLast(RSNode val); + @Import("removeLast") RSNode removeLast();