Skip to content

Commit

Permalink
allow accessing non-sponge provided datapacks
Browse files Browse the repository at this point in the history
  • Loading branch information
Faithcaio committed Jun 6, 2022
1 parent 24ca3a9 commit ba33fdb
Show file tree
Hide file tree
Showing 15 changed files with 290 additions and 185 deletions.
72 changes: 3 additions & 69 deletions src/main/java/org/spongepowered/api/advancement/Advancement.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,9 @@

import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.ComponentLike;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.spongepowered.api.ResourceKey;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.ResourceKeyed;
import org.spongepowered.api.advancement.criteria.AdvancementCriterion;
import org.spongepowered.api.datapack.DataPackEntry;
import org.spongepowered.api.util.ResourceKeyedBuilder;
import org.spongepowered.api.data.persistence.DataSerializable;

import java.util.Collection;
import java.util.List;
Expand All @@ -40,16 +37,7 @@
/**
* An advancement.
*/
public interface Advancement extends ComponentLike, DataPackEntry<Advancement> {

/**
* Creates a new {@link Builder} to create {@link Advancement}s.
*
* @return The new builder
*/
static Builder builder() {
return Sponge.game().builderProvider().provide(Builder.class);
}
public interface Advancement extends ComponentLike, ResourceKeyed, DataSerializable {

/**
* Gets the {@link AdvancementTree} this advancement is located in,
Expand Down Expand Up @@ -101,58 +89,4 @@ static Builder builder() {
*/
List<Component> toToastText();

/**
* A builder to create {@link Advancement}s.
*/
interface Builder extends ResourceKeyedBuilder<Advancement, Builder> {

/**
* Sets the parent {@link Advancement}.
* <p>For the root advancement use {@link #root}</p>
*
* @param parent The parent advancement
* @return This builder, for chaining
*/
Builder parent(Advancement parent);

/**
* Sets this advancement as root.
*
* @return This builder, for chaining
*/
Builder.RootStep root();

/**
* Define root advancement only parameters.
*/
interface RootStep extends Builder {

/**
* Sets the background path..
*
* @param backgroundPath The {@link AdvancementTree}s background.
*
* @return This builder, for chaining
*/
Builder background(ResourceKey backgroundPath);
}

/**
* Sets the {@link AdvancementCriterion} that should be used
* for the advancement. Defaults to {@link AdvancementCriterion#empty()}.
*
* @param criterion The criterion
* @return This builder, for chaining
*/
Builder criterion(AdvancementCriterion criterion);

/**
* Sets the {@link DisplayInfo}. Defaults to {code null}.
*
* @param displayInfo The display info
* @return This builder, for chaining
*/
Builder displayInfo(@Nullable DisplayInfo displayInfo);

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
/*
* This file is part of SpongeAPI, licensed under the MIT License (MIT).
*
* Copyright (c) SpongePowered <https://www.spongepowered.org>
* Copyright (c) contributors
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package org.spongepowered.api.advancement;

import org.checkerframework.checker.nullness.qual.Nullable;
import org.spongepowered.api.ResourceKey;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.advancement.criteria.AdvancementCriterion;
import org.spongepowered.api.datapack.DataPackEntry;
import org.spongepowered.api.util.ResourceKeyedBuilder;

/**
* A template for an {@link Advancement}.
* <p>Serialized into a data pack at {@code data/<namespace>/advancements/<value>.json}</p>
*/
public interface AdvancementTemplate extends DataPackEntry<AdvancementTemplate> {

/**
* Creates a new {@link Builder} to create {@link Advancement}s.
*
* @return The new builder
*/
static Builder builder() {
return Sponge.game().builderProvider().provide(Builder.class);
}

/**
* Return the advancement
*
* @return The advancement
*/
Advancement advancement();

/**
* A builder to create {@link Advancement}s.
*/
interface Builder extends ResourceKeyedBuilder<AdvancementTemplate, Builder> {

/**
* Sets the parent {@link Advancement}.
* <p>For the root advancement use {@link #root}</p>
*
* @param parent The parent advancement
* @return This builder, for chaining
*/
Builder parent(Advancement parent);

/**
* Sets this advancement as root.
*
* @return This builder, for chaining
*/
Builder.RootStep root();

/**
* Define root advancement only parameters.
*/
interface RootStep extends Builder {

/**
* Sets the background path..
*
* @param backgroundPath The {@link AdvancementTree}s background.
*
* @return This builder, for chaining
*/
Builder background(ResourceKey backgroundPath);
}

/**
* Sets the {@link AdvancementCriterion} that should be used
* for the advancement. Defaults to {@link AdvancementCriterion#empty()}.
*
* @param criterion The criterion
* @return This builder, for chaining
*/
Builder criterion(AdvancementCriterion criterion);

/**
* Sets the {@link DisplayInfo}. Defaults to {code null}.
*
* @param displayInfo The display info
* @return This builder, for chaining
*/
Builder displayInfo(@Nullable DisplayInfo displayInfo);

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,21 +24,34 @@
*/
package org.spongepowered.api.datapack;

import io.leangen.geantyref.TypeToken;
import org.spongepowered.api.advancement.Advancement;
import org.spongepowered.api.advancement.AdvancementTemplate;
import org.spongepowered.api.event.lifecycle.RegisterDataPackValueEvent;
import org.spongepowered.api.item.recipe.RecipeRegistration;
import org.spongepowered.api.registry.RegistryType;
import org.spongepowered.api.tag.TagTemplate;
import org.spongepowered.api.tag.Taggable;
import org.spongepowered.api.util.annotation.CatalogedBy;
import org.spongepowered.api.world.WorldTypeTemplate;
import org.spongepowered.api.world.generation.biome.BiomeTemplate;
import org.spongepowered.api.world.server.WorldTemplate;
import org.spongepowered.plugin.PluginContainer;

@CatalogedBy(DataPackTypes.class)
public interface DataPackType<T> {
@CatalogedBy(DataPacks.class)
public interface DataPack<T> {

TypeToken<T> type();
/**
* Returns the name of the datapack
*
* @return The name
*/
String name();

/**
* Returns the datapack description
*
* @return The description
*/
String description();

/**
* Gets if resources created by this type will persist even if the {@link PluginContainer plugin}
Expand All @@ -50,18 +63,28 @@ public interface DataPackType<T> {
*/
boolean persistent();

/**
* Returns a data pack for the same type of {@link DataPackEntry entries}.
*
* @param name The pack name
* @param description The pack description
*
* @return The new pack.
*/
DataPack<T> with(String name, String description);

interface Factory {

DataPackType<Advancement> advancement();
DataPack<AdvancementTemplate> advancement();

DataPackType<RecipeRegistration> recipe();
DataPack<RecipeRegistration> recipe();

DataPackType<WorldTypeTemplate> worldType();
DataPack<WorldTypeTemplate> worldType();

DataPackType<WorldTemplate> world();
DataPack<WorldTemplate> world();

DataPackType<TagTemplate> tag();
<T extends Taggable<T>> DataPack<TagTemplate<T>> tag(RegistryType<T> registryType);

DataPackType<BiomeTemplate> biome();
DataPack<BiomeTemplate> biome();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,15 @@
import org.spongepowered.api.data.persistence.DataSerializable;

/**
* A data pack. Can be saved using the {@link org.spongepowered.api.world.server.DataPackManager} or when registering it on a {@link org.spongepowered.api.event.lifecycle.RegisterDataPackValueEvent}
* A data pack entry. Can be saved using the {@link org.spongepowered.api.world.server.DataPackManager} or when registering it on a {@link org.spongepowered.api.event.lifecycle.RegisterDataPackValueEvent}
*/
public interface DataPackEntry<T extends DataPackEntry<T>> extends ResourceKeyed, DataSerializable {

DataPackType<T> type();
/**
* The data pack this entry belongs to.
*
* @return The data pack
*/
DataPack<T> pack();

}
50 changes: 0 additions & 50 deletions src/main/java/org/spongepowered/api/datapack/DataPackTypes.java

This file was deleted.

Loading

0 comments on commit ba33fdb

Please sign in to comment.