@@ -100,15 +100,15 @@ public boolean add(IItemHandler handler) {
100100
101101 @ Override
102102 public void add (int index , IItemHandler element ) {
103- if (invalidIndex (index )) return ;
104- int currentSlotIndex = handlerBySlotIndex .size ();
105- if (baseIndexOffset .containsKey (element )) {
103+ // Objects.checkIndex(index, size());
104+ if (handlerList .contains (element )) {
106105 throw new IllegalArgumentException ("Attempted to add item handler " + element + " twice" );
107106 }
108- handlerList .add (element );
109- baseIndexOffset .put (element , currentSlotIndex );
107+ handlerList .add (index , element );
108+ int offset = handlerBySlotIndex .size ();
109+ baseIndexOffset .put (element , offset );
110110 for (int slotIndex = 0 ; slotIndex < element .getSlots (); slotIndex ++) {
111- handlerBySlotIndex .put (currentSlotIndex + slotIndex , element );
111+ handlerBySlotIndex .put (offset + slotIndex , element );
112112 }
113113 }
114114
@@ -119,19 +119,28 @@ public IItemHandler get(int index) {
119119
120120 @ Override
121121 public IItemHandler remove (int index ) {
122- if (invalidIndex (index )) return null ;
123- var handler = get (index );
122+ // Objects.checkIndex(index, size());
123+ var handler2 = get (index );
124+ int offset2 = baseIndexOffset .getInt (handler2 );
125+
124126 for (int i = index ; i < size (); i ++) {
125- int offset = baseIndexOffset .getInt (get (i ));
126- for (int j = 0 ; j < get (index ).getSlots (); j ++) {
127+ int offset = baseIndexOffset .removeInt (get (i ));
128+ for (int j = 0 ; j < get (i ).getSlots (); j ++) {
127129 handlerBySlotIndex .remove (offset + j );
128130 }
129- baseIndexOffset .removeInt (handler );
130131 }
131- return handler ;
132- }
133132
134- private boolean invalidIndex (int index ) {
135- return index < 0 || index >= handlerList .size ();
133+ var removed = handlerList .remove (index );
134+ for (var handler : handlerList ) {
135+ if (baseIndexOffset .containsKey (handler ))
136+ continue ;
137+
138+ int offset = handlerBySlotIndex .size ();
139+ baseIndexOffset .put (handler , offset );
140+ for (int i = 0 ; i < handler .getSlots (); i ++) {
141+ handlerBySlotIndex .put (offset + i , handler );
142+ }
143+ }
144+ return removed ;
136145 }
137146}
0 commit comments