Selaa lähdekoodia

Allowing Cleric Domain to be fetched in a new class construction

Sam Jaffe 8 vuotta sitten
vanhempi
commit
12534481fe

+ 1 - 1
resources/classes/Cleric.json

@@ -27,7 +27,7 @@
     "Spellcraft"
   ],
   "spells":{
-    "spellBookTypeName":"{\"@c\":\".impl.Inspired\",\"classRef\":\"Cleric\",\"spellInfo\":{}}",
+    "spellBookTypeName":"[{\"@c\":\".impl.Inspired\",\"classRef\":\"Cleric\",\"spellInfo\":{}},{\"@c\":\".impl.Domain\"}]",
     "group":"DIVINE",
     "ability":"WIS",
     "perDay":[

+ 8 - 0
src/main/lombok/org/leumasjaffe/charsheet/model/DDCharacterClass.java

@@ -13,6 +13,7 @@ import org.leumasjaffe.observer.Observable;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
 
 import lombok.AccessLevel;
 import lombok.AllArgsConstructor;
@@ -69,6 +70,13 @@ public class DDCharacterClass extends Observable.Instance implements Comparable<
 				DDSpellbook.Secondary.class.cast(books.get(1)).setMainSpellbook(main);
 			}
 		}
+		
+		@JsonValue
+		private DDSpellbook[] actual() {
+			return Stream.concat(Stream.of(main), 
+					secondary.map(Stream::of).orElse(Stream.empty())).toArray(DDSpellbook[]::new);
+		}
+		
 		DDSpellbook main;
 		Optional<DDSpellbook> secondary = Optional.empty();
 	}

+ 1 - 1
src/main/lombok/org/leumasjaffe/charsheet/model/DDClass.java

@@ -89,7 +89,7 @@ public class DDClass {
 
 	@SneakyThrows({JsonMappingException.class, JsonParseException.class, IOException.class})
 	private DDSpellbookWrapper createSpellbookImpl(String st) {
-		if (!st.startsWith("{")) {
+		if (!st.startsWith("[") && !st.startsWith("{")) {
 			st = new StringFormatter("{{\"@c\":\"{}\"}}").format(st);
 		}
 		return mapper.readValue(st.getBytes(), DDSpellbookWrapper.class);

+ 1 - 0
src/main/lombok/org/leumasjaffe/charsheet/model/magic/DDSpellbook.java

@@ -44,6 +44,7 @@ public abstract class DDSpellbook extends Observable.Instance {
 	
 	public abstract void castSpell( int level, final DDSpell spell );
 	
+	@JsonIgnore
 	public String getSingleName() {
 		return getName();
 	}

+ 5 - 2
src/main/lombok/org/leumasjaffe/charsheet/model/magic/impl/Domain.java

@@ -3,6 +3,7 @@ package org.leumasjaffe.charsheet.model.magic.impl;
 import java.io.File;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
@@ -13,6 +14,7 @@ import org.leumasjaffe.charsheet.model.magic.DDSpell;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
@@ -32,13 +34,14 @@ public class Domain extends Prepared implements DDSpellbook.Secondary {
 			return mapper.readValue(new File("resources/spells/domain/" + name.toLowerCase() + ".json"), 
 					new TypeReference<SpellBookImpl>() {});
 		}
+		@JsonValue private String getImplName() { return name.replaceAll(".*::", ""); }
 		String name;
 		List<Object> powers;
 		List<DDSpell> spells;
 	}
 	
 	@JsonIgnore DDSpellbook mainSpellbook;
-	Set<SpellBookImpl> domains;
+	Set<SpellBookImpl> domains = new LinkedHashSet<>();
 	List<DDSpell> spellsPrepared, spellsPreparedPreviously;
 	
 	@Override
@@ -66,7 +69,7 @@ public class Domain extends Prepared implements DDSpellbook.Secondary {
 
 	@Override
 	public int numSpellsPerDayAtLevel(int level) {
-		return 1; // TODO
+		return mainSpellbook.numSpellsKnownAtLevel(level) != 0 ? 1 : 0;
 	}
 
 	@Override