diff --git a/src/main/java/org/geysermc/packgenerator/mappings/GeyserMapping.java b/src/main/java/org/geysermc/packgenerator/mappings/GeyserMapping.java index 5444f61..1ecce01 100644 --- a/src/main/java/org/geysermc/packgenerator/mappings/GeyserMapping.java +++ b/src/main/java/org/geysermc/packgenerator/mappings/GeyserMapping.java @@ -55,4 +55,20 @@ public record GeyserMapping(ResourceLocation model, ResourceLocation bedrockIden ).apply(instance, BedrockOptions::new) ); } + + public boolean conflictsWith(GeyserMapping other) { + if (!model.equals(other.model)) { + return false; + } else if (predicates.size() == other.predicates.size()) { + boolean predicatesAreEqual = true; + for (GeyserPredicate predicate : predicates) { + if (!other.predicates.contains(predicate)) { + predicatesAreEqual = false; + break; + } + } + return predicatesAreEqual; + } + return false; + } } diff --git a/src/main/java/org/geysermc/packgenerator/mappings/GeyserMappings.java b/src/main/java/org/geysermc/packgenerator/mappings/GeyserMappings.java index beadaf2..07d93f1 100644 --- a/src/main/java/org/geysermc/packgenerator/mappings/GeyserMappings.java +++ b/src/main/java/org/geysermc/packgenerator/mappings/GeyserMappings.java @@ -39,7 +39,11 @@ public class GeyserMappings { } public void map(Holder item, GeyserMapping mapping) { - // TODO conflict detection + for (GeyserMapping existing : mappings.get(item)) { + if (existing.conflictsWith(mapping)) { + throw new IllegalArgumentException("Mapping conflicts with existing mapping"); + } + } mappings.put(item, mapping); }