Advancement generators
This commit is contained in:
parent
eccabf469d
commit
ef82c830de
13 changed files with 347 additions and 8 deletions
|
@ -0,0 +1,61 @@
|
|||
package org.dimdev.dimdoors.datagen;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import net.minecraft.advancement.Advancement;
|
||||
import net.minecraft.data.DataCache;
|
||||
import net.minecraft.data.DataGenerator;
|
||||
import net.minecraft.data.DataProvider;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
public class AdvancementProvider implements DataProvider {
|
||||
private static final Logger LOGGER = LogManager.getLogger();
|
||||
private static final Gson GSON = (new GsonBuilder()).setPrettyPrinting().create();
|
||||
private final DataGenerator root;
|
||||
private final List<Consumer<Consumer<Advancement>>> tabGenerators = ImmutableList.of(new AdvancementTab());
|
||||
|
||||
public AdvancementProvider(DataGenerator dataGenerator) {
|
||||
this.root = dataGenerator;
|
||||
}
|
||||
|
||||
private static Path getOutput(Path root, Advancement advancement) {
|
||||
return root.resolve("data/" + advancement.getId().getNamespace() + "/advancements/" + advancement.getId().getPath() + ".json");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(DataCache dataCache) {
|
||||
Path outputRoot = this.root.getOutput();
|
||||
Set<Identifier> ids = new HashSet<>();
|
||||
Consumer<Advancement> writer = advancement -> {
|
||||
if (!ids.add(advancement.getId())) {
|
||||
throw new IllegalStateException("Duplicate advancement " + advancement.getId());
|
||||
}
|
||||
Path output = getOutput(outputRoot, advancement);
|
||||
|
||||
try {
|
||||
DataProvider.writeToPath(GSON, dataCache, advancement.createTask().toJson(), output);
|
||||
} catch (IOException ex) {
|
||||
LOGGER.error("Couldn't save advancement {}", output, ex);
|
||||
}
|
||||
};
|
||||
for (Consumer<Consumer<Advancement>> generator : this.tabGenerators) {
|
||||
generator.accept(writer);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Dimdoors Advancements";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
package org.dimdev.dimdoors.datagen;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import org.dimdev.dimdoors.item.ModItems;
|
||||
import org.dimdev.dimdoors.world.ModDimensions;
|
||||
|
||||
import net.minecraft.advancement.Advancement;
|
||||
import net.minecraft.advancement.AdvancementDisplay;
|
||||
import net.minecraft.advancement.AdvancementFrame;
|
||||
import net.minecraft.advancement.criterion.ChangedDimensionCriterion;
|
||||
import net.minecraft.advancement.criterion.InventoryChangedCriterion;
|
||||
import net.minecraft.item.ItemConvertible;
|
||||
import net.minecraft.item.Items;
|
||||
import net.minecraft.predicate.entity.EntityPredicate;
|
||||
import net.minecraft.text.TranslatableText;
|
||||
|
||||
public class AdvancementTab implements Consumer<Consumer<Advancement>> {
|
||||
static AdvancementDisplay makeDisplay(ItemConvertible item, String titleKey) {
|
||||
return new AdvancementDisplay(item.asItem().getDefaultStack(),
|
||||
new TranslatableText("dimdoors.advancement." + titleKey),
|
||||
new TranslatableText("dimdoors.advancement." + titleKey + ".desc"),
|
||||
null,
|
||||
AdvancementFrame.TASK,
|
||||
true,
|
||||
true,
|
||||
false
|
||||
);
|
||||
}
|
||||
|
||||
static AdvancementDisplay makeDisplay(ItemConvertible item, String titleKey, AdvancementFrame advancementFrame) {
|
||||
return new AdvancementDisplay(item.asItem().getDefaultStack(),
|
||||
new TranslatableText("dimdoors.advancement." + titleKey),
|
||||
new TranslatableText("dimdoors.advancement." + titleKey + ".desc"),
|
||||
null,
|
||||
advancementFrame,
|
||||
true,
|
||||
true,
|
||||
false
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void accept(Consumer<Advancement> advancementConsumer) {
|
||||
Advancement root = Advancement.Task.create()
|
||||
.display(makeDisplay(ModItems.RIFT_BLADE, "root"))
|
||||
.criterion("inventory_changed", InventoryChangedCriterion.Conditions.items(Items.ENDER_PEARL))
|
||||
.build(advancementConsumer, "dimdoors:dimdoors/root");
|
||||
|
||||
Advancement.Task.create()
|
||||
.display(makeDisplay(ModItems.IRON_DIMENSIONAL_DOOR, "public_pocket"))
|
||||
.criterion("changed_dimension", ChangedDimensionCriterion.Conditions.to(ModDimensions.PUBLIC))
|
||||
.parent(root)
|
||||
.build(advancementConsumer, "dimdoors:dimdoors/public_pocket");
|
||||
Advancement.Task.create()
|
||||
.display(makeDisplay(ModItems.QUARTZ_DIMENSIONAL_DOOR, "private_pocket"))
|
||||
.criterion("changed_dimension", ChangedDimensionCriterion.Conditions.to(ModDimensions.PERSONAL))
|
||||
.parent(root)
|
||||
.build(advancementConsumer, "dimdoors:dimdoors/private_pocket");
|
||||
Advancement.Task.create()
|
||||
.display(makeDisplay(ModItems.GOLD_DIMENSIONAL_DOOR, "dungeon"))
|
||||
.criterion("changed_dimension", ChangedDimensionCriterion.Conditions.to(ModDimensions.DUNGEON))
|
||||
.parent(root)
|
||||
.build(advancementConsumer, "dimdoors:dimdoors/dungeon");
|
||||
Advancement.Task.create()
|
||||
.display(makeDisplay(ModItems.UNRAVELLED_FABRIC, "limbo"))
|
||||
.criterion("changed_dimension", ChangedDimensionCriterion.Conditions.to(ModDimensions.LIMBO))
|
||||
.parent(root)
|
||||
.build(advancementConsumer, "dimdoors:dimdoors/limbo");
|
||||
Advancement.Task.create()
|
||||
.display(makeDisplay(ModItems.ETERNAL_FLUID_BUCKET, "escape_limbo"))
|
||||
.criterion("changed_dimension", new ChangedDimensionCriterion.Conditions(EntityPredicate.Extended.EMPTY, ModDimensions.LIMBO, null))
|
||||
.parent(root)
|
||||
.build(advancementConsumer, "dimdoors:dimdoors/escape_limbo");
|
||||
}
|
||||
}
|
|
@ -1,6 +1,5 @@
|
|||
package org.dimdev.dimdoors.datagen;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.Collections;
|
||||
|
||||
|
@ -26,7 +25,8 @@ public class DatagenInitializer implements PreLaunchEntrypoint {
|
|||
ModBlocks.init();
|
||||
ModItems.init();
|
||||
DataGenerator dataGenerator = new DataGenerator(Paths.get("./generated"), Collections.emptyList());
|
||||
dataGenerator.install(new FabricRecipeHandler(dataGenerator));
|
||||
dataGenerator.install(new FabricRecipeProvider(dataGenerator));
|
||||
dataGenerator.install(new AdvancementProvider(dataGenerator));
|
||||
dataGenerator.install(RECIPE_CONSUMER = new RecipeConsumer(dataGenerator));
|
||||
dataGenerator.run();
|
||||
} catch (Exception e) {
|
||||
|
|
|
@ -17,10 +17,10 @@ import net.minecraft.util.Identifier;
|
|||
|
||||
import static org.dimdev.dimdoors.datagen.DatagenInitializer.RECIPE_CONSUMER;
|
||||
|
||||
public class FabricRecipeHandler implements DataProvider {
|
||||
public class FabricRecipeProvider implements DataProvider {
|
||||
private final DataGenerator dataGenerator;
|
||||
|
||||
public FabricRecipeHandler(DataGenerator dataGenerator) {
|
||||
public FabricRecipeProvider(DataGenerator dataGenerator) {
|
||||
this.dataGenerator = dataGenerator;
|
||||
}
|
||||
|
|
@ -29,7 +29,7 @@ public class RecipeConsumer implements DataProvider, Consumer<RecipeJsonProvider
|
|||
public void run(DataCache cache) throws IOException {
|
||||
Path path = this.dataGenerator.getOutput();
|
||||
Set<Identifier> set = Sets.newHashSet();
|
||||
recipes.forEach((recipeJsonProvider) -> {
|
||||
this.recipes.forEach((recipeJsonProvider) -> {
|
||||
if (!set.add(recipeJsonProvider.getRecipeId())) {
|
||||
throw new IllegalStateException("Duplicate recipe " + recipeJsonProvider.getRecipeId());
|
||||
} else {
|
||||
|
@ -49,6 +49,6 @@ public class RecipeConsumer implements DataProvider, Consumer<RecipeJsonProvider
|
|||
|
||||
@Override
|
||||
public void accept(RecipeJsonProvider recipeJsonProvider) {
|
||||
recipes.add(recipeJsonProvider);
|
||||
this.recipes.add(recipeJsonProvider);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -195,5 +195,17 @@
|
|||
"dimdoors.config.screen.reload": "Reload Config",
|
||||
"dimdoors.linkProperties.oneWay": "One way: %s",
|
||||
"dimdoors.linkProperties.linksRemaining": "Remaining links: %s",
|
||||
"dimdoors.color": "Color: "
|
||||
"dimdoors.color": "Color: ",
|
||||
"dimdoors.advancement.root": "Dimensional Doors",
|
||||
"dimdoors.advancement.root.desc": "Venture into the depths",
|
||||
"dimdoors.advancement.public_pocket": "Public Pockets",
|
||||
"dimdoors.advancement.public_pocket.desc": "Enter a public pocket",
|
||||
"dimdoors.advancement.private_pocket": "Private Pockets",
|
||||
"dimdoors.advancement.private_pocket.desc": "Enter a private pocket",
|
||||
"dimdoors.advancement.dungeon": "Dungeons",
|
||||
"dimdoors.advancement.dungeon.desc": "Enter a dungeon",
|
||||
"dimdoors.advancement.limbo": "Decay",
|
||||
"dimdoors.advancement.limbo.desc": "Enter limbo",
|
||||
"dimdoors.advancement.escape_limbo": "Escape",
|
||||
"dimdoors.advancement.escape_limbo.desc": "Escape limbo"
|
||||
}
|
||||
|
|
|
@ -44,4 +44,4 @@
|
|||
"item.unstable_dimensional_door.info": "Attenziione: Porta a una destinazione casuale",
|
||||
"item.oak_dimensional_door.info": "Piazzalo sul blocco sotto una \\nfrattura per creare un portale, \\no piazzalo da qualunque altra parte \\nin una dimensione tascabile per uscire.",
|
||||
"entity.dimdoors.monolith": "Monolito"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"parent": "dimdoors:dimdoors/root",
|
||||
"display": {
|
||||
"icon": {
|
||||
"item": "dimdoors:gold_dimensional_door"
|
||||
},
|
||||
"title": {
|
||||
"translate": "dimdoors.advancement.dungeon"
|
||||
},
|
||||
"description": {
|
||||
"translate": "dimdoors.advancement.dungeon.desc"
|
||||
},
|
||||
"frame": "task",
|
||||
"show_toast": true,
|
||||
"announce_to_chat": true,
|
||||
"hidden": false
|
||||
},
|
||||
"criteria": {
|
||||
"changed_dimension": {
|
||||
"trigger": "minecraft:changed_dimension",
|
||||
"conditions": {
|
||||
"to": "dimdoors:dungeon_pockets"
|
||||
}
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"changed_dimension"
|
||||
]
|
||||
]
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"parent": "dimdoors:dimdoors/root",
|
||||
"display": {
|
||||
"icon": {
|
||||
"item": "dimdoors:eternal_fluid_bucket"
|
||||
},
|
||||
"title": {
|
||||
"translate": "dimdoors.advancement.escape_limbo"
|
||||
},
|
||||
"description": {
|
||||
"translate": "dimdoors.advancement.escape_limbo.desc"
|
||||
},
|
||||
"frame": "task",
|
||||
"show_toast": true,
|
||||
"announce_to_chat": true,
|
||||
"hidden": false
|
||||
},
|
||||
"criteria": {
|
||||
"changed_dimension": {
|
||||
"trigger": "minecraft:changed_dimension",
|
||||
"conditions": {
|
||||
"from": "dimdoors:limbo"
|
||||
}
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"changed_dimension"
|
||||
]
|
||||
]
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"parent": "dimdoors:dimdoors/root",
|
||||
"display": {
|
||||
"icon": {
|
||||
"item": "dimdoors:unravelled_fabric"
|
||||
},
|
||||
"title": {
|
||||
"translate": "dimdoors.advancement.limbo"
|
||||
},
|
||||
"description": {
|
||||
"translate": "dimdoors.advancement.limbo.desc"
|
||||
},
|
||||
"frame": "task",
|
||||
"show_toast": true,
|
||||
"announce_to_chat": true,
|
||||
"hidden": false
|
||||
},
|
||||
"criteria": {
|
||||
"changed_dimension": {
|
||||
"trigger": "minecraft:changed_dimension",
|
||||
"conditions": {
|
||||
"to": "dimdoors:limbo"
|
||||
}
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"changed_dimension"
|
||||
]
|
||||
]
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"parent": "dimdoors:dimdoors/root",
|
||||
"display": {
|
||||
"icon": {
|
||||
"item": "dimdoors:quartz_dimensional_door"
|
||||
},
|
||||
"title": {
|
||||
"translate": "dimdoors.advancement.private_pocket"
|
||||
},
|
||||
"description": {
|
||||
"translate": "dimdoors.advancement.private_pocket.desc"
|
||||
},
|
||||
"frame": "task",
|
||||
"show_toast": true,
|
||||
"announce_to_chat": true,
|
||||
"hidden": false
|
||||
},
|
||||
"criteria": {
|
||||
"changed_dimension": {
|
||||
"trigger": "minecraft:changed_dimension",
|
||||
"conditions": {
|
||||
"to": "dimdoors:personal_pockets"
|
||||
}
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"changed_dimension"
|
||||
]
|
||||
]
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"parent": "dimdoors:dimdoors/root",
|
||||
"display": {
|
||||
"icon": {
|
||||
"item": "dimdoors:iron_dimensional_door"
|
||||
},
|
||||
"title": {
|
||||
"translate": "dimdoors.advancement.public_pocket"
|
||||
},
|
||||
"description": {
|
||||
"translate": "dimdoors.advancement.public_pocket.desc"
|
||||
},
|
||||
"frame": "task",
|
||||
"show_toast": true,
|
||||
"announce_to_chat": true,
|
||||
"hidden": false
|
||||
},
|
||||
"criteria": {
|
||||
"changed_dimension": {
|
||||
"trigger": "minecraft:changed_dimension",
|
||||
"conditions": {
|
||||
"to": "dimdoors:public_pockets"
|
||||
}
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"changed_dimension"
|
||||
]
|
||||
]
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"display": {
|
||||
"icon": {
|
||||
"item": "dimdoors:rift_blade",
|
||||
"nbt": "{Damage:0}"
|
||||
},
|
||||
"title": {
|
||||
"translate": "dimdoors.advancement.root"
|
||||
},
|
||||
"description": {
|
||||
"translate": "dimdoors.advancement.root.desc"
|
||||
},
|
||||
"frame": "task",
|
||||
"show_toast": true,
|
||||
"announce_to_chat": true,
|
||||
"hidden": false
|
||||
},
|
||||
"criteria": {
|
||||
"inventory_changed": {
|
||||
"trigger": "minecraft:inventory_changed",
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"item": "minecraft:ender_pearl"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"inventory_changed"
|
||||
]
|
||||
]
|
||||
}
|
Loading…
Add table
Reference in a new issue