Skip to content

Commit 52680eb

Browse files
committed
Add put if not null to CompoundTag
1 parent f05f37f commit 52680eb

File tree

2 files changed

+44
-22
lines changed

2 files changed

+44
-22
lines changed

src/main/java/net/querz/nbt/tag/CompoundTag.java

+11-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package net.querz.nbt.tag;
22

3-
import net.querz.io.MaxDepthIO;
4-
53
import java.util.Collection;
64
import java.util.HashMap;
75
import java.util.Iterator;
@@ -10,7 +8,10 @@
108
import java.util.Set;
119
import java.util.function.BiConsumer;
1210

13-
public class CompoundTag extends Tag<Map<String, Tag<?>>> implements Iterable<Map.Entry<String, Tag<?>>>, Comparable<CompoundTag>, MaxDepthIO {
11+
import net.querz.io.MaxDepthIO;
12+
13+
public class CompoundTag extends Tag<Map<String, Tag<?>>>
14+
implements Iterable<Map.Entry<String, Tag<?>>>, Comparable<CompoundTag>, MaxDepthIO {
1415

1516
public static final byte ID = 10;
1617

@@ -195,6 +196,13 @@ public Tag<?> put(String key, Tag<?> tag) {
195196
return getValue().put(Objects.requireNonNull(key), Objects.requireNonNull(tag));
196197
}
197198

199+
public Tag<?> putIfNotNull(String key, Tag<?> tag) {
200+
if (tag == null) {
201+
return this;
202+
}
203+
return put(key, tag);
204+
}
205+
198206
public Tag<?> putBoolean(String key, boolean value) {
199207
return put(key, new ByteTag(value));
200208
}

src/test/java/net/querz/nbt/tag/CompoundTagTest.java

+33-19
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import java.util.Arrays;
77
import java.util.LinkedHashMap;
88
import java.util.Map;
9+
10+
import static org.junit.Assert.assertArrayEquals;
911
import static org.junit.Assert.assertNotEquals;
1012

1113
public class CompoundTagTest extends NBTTestCase {
@@ -37,16 +39,16 @@ public void testEquals() {
3739
ct2.putString("str", "foo");
3840
ct2.put("list", new ListTag<>(ByteTag.class));
3941
ct2.getListTag("list").addByte((byte) 123);
40-
assertTrue(ct.equals(ct2));
42+
assertEquals(ct, ct2);
4143

4244
ct2.getListTag("list").asByteTagList().get(0).setValue((byte) 124);
43-
assertFalse(ct.equals(ct2));
45+
assertNotEquals(ct, ct2);
4446

4547
ct2.remove("str");
46-
assertFalse(ct.equals(ct2));
48+
assertNotEquals(ct, ct2);
4749

4850
assertThrowsNoRuntimeException(() -> ct.equals("blah"));
49-
assertFalse(ct.equals("blah"));
51+
assertNotEquals("blah", ct);
5052

5153
assertEquals(ct, ct);
5254
}
@@ -137,10 +139,10 @@ public void testHashCode() {
137139
public void testClone() {
138140
CompoundTag ct = createCompoundTag();
139141
CompoundTag cl = ct.clone();
140-
assertTrue(ct.equals(cl));
141-
assertFalse(ct == cl);
142-
assertFalse(ct.get("list") == cl.get("list"));
143-
assertFalse(invokeGetValue(ct) == invokeGetValue(cl));
142+
assertEquals(ct, cl);
143+
assertNotSame(ct, cl);
144+
assertNotSame(ct.get("list"), cl.get("list"));
145+
assertNotSame(invokeGetValue(ct), invokeGetValue(cl));
144146
}
145147

146148
public void testClear() {
@@ -154,9 +156,12 @@ public void testClear() {
154156
public void testSerializeDeserialize() {
155157
CompoundTag ct = createCompoundTag();
156158
byte[] data = serialize(ct);
157-
assertTrue(Arrays.equals(new byte[]{10, 0, 0, 1, 0, 1, 98, 127, 8, 0, 3, 115, 116, 114, 0, 3, 102, 111, 111, 9, 0, 4, 108, 105, 115, 116, 1, 0, 0, 0, 1, 123, 0}, data));
159+
assertArrayEquals(
160+
new byte[] { 10, 0, 0, 1, 0, 1, 98, 127, 8, 0, 3, 115, 116, 114, 0, 3, 102, 111, 111, 9, 0, 4, 108, 105, 115, 116,
161+
1, 0, 0, 0, 1, 123, 0
162+
}, data);
158163
CompoundTag tt = (CompoundTag) deserialize(data);
159-
assertTrue(ct.equals(tt));
164+
assertEquals(ct, tt);
160165
}
161166

162167
public void testCasting() {
@@ -169,9 +174,9 @@ public void testCasting() {
169174
assertEquals(Byte.MAX_VALUE, cc.get("b", ByteTag.class).asByte());
170175
assertThrowsRuntimeException(() -> cc.getShort("b"), ClassCastException.class);
171176
assertEquals(0, cc.getByte("bb"));
172-
assertEquals(true, cc.getBoolean("b"));
177+
assertTrue(cc.getBoolean("b"));
173178
cc.putByte("b2", (byte) 0);
174-
assertEquals(false, cc.getBoolean("b2"));
179+
assertFalse(cc.getBoolean("b2"));
175180
cc.putBoolean("b3", false);
176181
assertEquals(0, cc.getByte("b3"));
177182
cc.putBoolean("b4", true);
@@ -222,23 +227,23 @@ public void testCasting() {
222227
cc.putByteArray("ba", new byte[]{Byte.MIN_VALUE, 0, Byte.MAX_VALUE});
223228
assertEquals(new ByteArrayTag(new byte[]{Byte.MIN_VALUE, 0, Byte.MAX_VALUE}), cc.getByteArrayTag("ba"));
224229
assertNull(cc.getByteArrayTag("baba"));
225-
assertTrue(Arrays.equals(new byte[]{Byte.MIN_VALUE, 0, Byte.MAX_VALUE}, cc.get("ba", ByteArrayTag.class).getValue()));
230+
assertArrayEquals(new byte[] { Byte.MIN_VALUE, 0, Byte.MAX_VALUE }, cc.get("ba", ByteArrayTag.class).getValue());
226231
assertThrowsRuntimeException(() -> cc.getIntArray("ba"), ClassCastException.class);
227-
assertTrue(Arrays.equals(new byte[0], cc.getByteArray("baba")));
232+
assertArrayEquals(new byte[0], cc.getByteArray("baba"));
228233

229234
cc.putIntArray("ia", new int[]{Integer.MIN_VALUE, 0, Integer.MAX_VALUE});
230235
assertEquals(new IntArrayTag(new int[]{Integer.MIN_VALUE, 0, Integer.MAX_VALUE}), cc.getIntArrayTag("ia"));
231236
assertNull(cc.getIntArrayTag("iaia"));
232-
assertTrue(Arrays.equals(new int[]{Integer.MIN_VALUE, 0, Integer.MAX_VALUE}, cc.get("ia", IntArrayTag.class).getValue()));
237+
assertArrayEquals(new int[] { Integer.MIN_VALUE, 0, Integer.MAX_VALUE }, cc.get("ia", IntArrayTag.class).getValue());
233238
assertThrowsRuntimeException(() -> cc.getLongArray("ia"), ClassCastException.class);
234-
assertTrue(Arrays.equals(new int[0], cc.getIntArray("iaia")));
239+
assertArrayEquals(new int[0], cc.getIntArray("iaia"));
235240

236241
cc.putLongArray("la", new long[]{Long.MIN_VALUE, 0, Long.MAX_VALUE});
237242
assertEquals(new LongArrayTag(new long[]{Long.MIN_VALUE, 0, Long.MAX_VALUE}), cc.getLongArrayTag("la"));
238243
assertNull(cc.getLongArrayTag("lala"));
239-
assertTrue(Arrays.equals(new long[]{Long.MIN_VALUE, 0, Long.MAX_VALUE}, cc.get("la", LongArrayTag.class).getValue()));
244+
assertArrayEquals(new long[] { Long.MIN_VALUE, 0, Long.MAX_VALUE }, cc.get("la", LongArrayTag.class).getValue());
240245
assertThrowsRuntimeException(() -> cc.getListTag("la"), ClassCastException.class);
241-
assertTrue(Arrays.equals(new long[0], cc.getLongArray("lala")));
246+
assertArrayEquals(new long[0], cc.getLongArray("lala"));
242247

243248
cc.put("li", new ListTag<>(IntTag.class));
244249
assertEquals(new ListTag<>(IntTag.class), cc.getListTag("li"));
@@ -302,7 +307,7 @@ public void testEntrySet() {
302307

303308
public void testContains() {
304309
CompoundTag ct = createCompoundTag();
305-
assertTrue(3 == ct.size());
310+
assertEquals(3, ct.size());
306311
assertTrue(ct.containsKey("b"));
307312
assertTrue(ct.containsKey("str"));
308313
assertTrue(ct.containsKey("list"));
@@ -359,4 +364,13 @@ public void testIterator() {
359364
});
360365
assertEquals(3, ct.size());
361366
}
367+
368+
public void testPutIfNotNull() {
369+
CompoundTag ct = new CompoundTag();
370+
assertEquals(0, ct.size());
371+
ct.putIfNotNull("foo", new StringTag("bar"));
372+
ct.putIfNotNull("bar", null);
373+
assertEquals(1, ct.size());
374+
assertEquals("bar", ct.getString("foo"));
375+
}
362376
}

0 commit comments

Comments
 (0)