Skip to content

Commit

Permalink
Fix Listable data contains not being consistent. Fixed building as well
Browse files Browse the repository at this point in the history
  • Loading branch information
jaredlll08 committed Nov 28, 2022
1 parent 4da898d commit d6917ba
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 25 deletions.
Expand Up @@ -6,11 +6,14 @@ val actualSimple = <item:minecraft:apple>;
val actualHard = <item:minecraft:apple>.withTag({cool: "beans", coll: [1 as int, 2 as int, 3 as int]});
val actualExact = <item:minecraft:apple>.withTag({cool: "beans"});

val partials = [ partialAll, partialOnly, partialColl ];
val actuals = [ actualSimple, actualHard, actualExact ];
println(partialAll.matches(actualSimple)); // false
println(partialAll.matches(actualHard)); // true
println(partialAll.matches(actualExact)); // true

for p in partials {
for a in actuals {
println(p.matches(a));
}
}
println(partialOnly.matches(actualSimple)); // false
println(partialOnly.matches(actualHard)); // true
println(partialOnly.matches(actualExact)); // true

println(partialColl.matches(actualSimple)); // false
println(partialColl.matches(actualHard)); // true
println(partialColl.matches(actualExact)); // false
Expand Up @@ -59,7 +59,12 @@ public void remove(int index) {

@Override
public boolean contains(IData other) {


if(other.isListable()) {
List<IData> dataValues = other.asList();
return dataValues != null && containsList(dataValues);
}

return getInternal().contains(ByteTag.valueOf(other.asByte()));
}

Expand Down
Expand Up @@ -2,11 +2,15 @@

import com.blamejared.crafttweaker.api.CraftTweakerConstants;
import com.blamejared.crafttweaker.api.annotation.ZenRegister;
import com.blamejared.crafttweaker.api.data.converter.tag.TagToDataConverter;
import com.blamejared.crafttweaker.api.data.visitor.DataToStringVisitor;
import com.blamejared.crafttweaker.api.data.visitor.DataToTextComponentVisitor;
import com.blamejared.crafttweaker.api.data.visitor.DataVisitor;
import com.blamejared.crafttweaker_annotations.annotations.Document;
import net.minecraft.Util;
import net.minecraft.nbt.CollectionTag;
import net.minecraft.nbt.Tag;
import net.minecraft.world.level.storage.DataVersion;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.openzen.zencode.java.ZenCodeType;
Expand Down Expand Up @@ -749,6 +753,23 @@ default boolean isMappable() {
return false;
}

default boolean containsList(List<IData> dataValues) {

if(getInternal() instanceof CollectionTag<?> internal) {
outer:
for(IData dataValue : dataValues) {
for(Tag value : internal) {
if(TagToDataConverter.convert(value).contains(dataValue)) {
continue outer;
}
}

return false;
}
return true;
}
return false;
}

/**
* Used to specify what "type" of IData this is.
Expand Down
Expand Up @@ -59,6 +59,11 @@ public void remove(int index) {

@Override
public boolean contains(IData other) {

if(other.isListable()) {
List<IData> dataValues = other.asList();
return dataValues != null && containsList(dataValues);
}

return getInternal().contains(IntTag.valueOf(other.asInt()));
}
Expand Down
Expand Up @@ -107,22 +107,6 @@ public boolean contains(IData other) {
return false;
}

private boolean containsList(List<IData> dataValues) {

outer:
for(IData dataValue : dataValues) {
for(Tag value : getInternal()) {
if(TagToDataConverter.convert(value).contains(dataValue)) {
continue outer;
}
}

return false;
}

return true;
}

@Override
public boolean equalTo(IData other) {

Expand Down
Expand Up @@ -66,7 +66,12 @@ public void remove(int index) {

@Override
public boolean contains(IData other) {


if(other.isListable()) {
List<IData> dataValues = other.asList();
return dataValues != null && containsList(dataValues);
}

return getInternal().contains(LongTag.valueOf(other.asLong()));
}

Expand Down

0 comments on commit d6917ba

Please sign in to comment.