移植进度

This commit is contained in:
17146 2025-04-04 15:21:41 +08:00
parent fa07e0d909
commit b8297e9614
25 changed files with 948 additions and 5 deletions

View file

@ -0,0 +1,17 @@
// 1.21.1 2025-04-04T15:18:11.251884 Superb Warfare Advancements
03d6ad4d0bdd3ba66b765dcae9705692070e7f94 data/superbwarfare/advancement/main/ancient_technology.json
d24849d7fc09d8cc9a27203e57f1fd42f72a27a7 data/superbwarfare/advancement/main/banzai.json
70bd4fa04553c415c80656c4b07cf3814a13110c data/superbwarfare/advancement/main/best_friend.json
a36b5cb81c0038d909b2b90da89abed15268e750 data/superbwarfare/advancement/main/blueprint.json
120bd3b36a2c561d4e54e860afa4a9900936129e data/superbwarfare/advancement/main/boomstick_melee.json
6be355a5d8c94c2638163394c48905365b8d4146 data/superbwarfare/advancement/main/cannon_blueprint.json
57bb19a6713a0da6c5b46ac13f603463a755ced5 data/superbwarfare/advancement/main/clean_energy.json
39d859d779a4807144ecb87c91e60ac193812133 data/superbwarfare/advancement/main/common_blueprint.json
c051b49513bac2be82c2c24e236734a5c3a358c8 data/superbwarfare/advancement/main/enclave.json
5ac1ed91c7e49a728ab0174e3b828998bfd94801 data/superbwarfare/advancement/main/epic_blueprint.json
47b2d8bd5335e224be175f09b49fcbd4aafa4cf6 data/superbwarfare/advancement/main/hammer.json
926900f8c598a039ffbf8cac552f397c522f82c7 data/superbwarfare/advancement/main/legendary_blueprint.json
52417b43fbf1ca3a41d95ee51eafdc4f734bfaa3 data/superbwarfare/advancement/main/physics_excalibur.json
392baba1930be09abc70836090c884ad4ada82e8 data/superbwarfare/advancement/main/rare_blueprint.json
2df388bd7a8e6d162d005aff3bd4892763549ccd data/superbwarfare/advancement/main/root.json
6855de73219722b4e44985c87f2d57d71cfd7e15 data/superbwarfare/advancement/main/super_container.json

View file

@ -0,0 +1,34 @@
{
"parent": "superbwarfare:main/root",
"criteria": {
"0": {
"conditions": {
"items": [
{
"items": "superbwarfare:ancient_cpu"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"display": {
"description": {
"translate": "superbwarfare.advancement.main.ancient_technology.des"
},
"frame": "goal",
"icon": {
"count": 1,
"id": "superbwarfare:ancient_cpu"
},
"title": {
"translate": "superbwarfare.advancement.main.ancient_technology"
}
},
"requirements": [
[
"0"
]
],
"sends_telemetry_event": true
}

View file

@ -0,0 +1,33 @@
{
"parent": "superbwarfare:main/root",
"criteria": {
"0": {
"conditions": {
"items": [
{
"items": "superbwarfare:lunge_mine"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"display": {
"description": {
"translate": "superbwarfare.advancement.main.banzai.des"
},
"icon": {
"count": 1,
"id": "superbwarfare:lunge_mine"
},
"title": {
"translate": "superbwarfare.advancement.main.banzai"
}
},
"requirements": [
[
"0"
]
],
"sends_telemetry_event": true
}

View file

@ -0,0 +1,34 @@
{
"parent": "superbwarfare:main/root",
"criteria": {
"0": {
"conditions": {
"items": [
{
"items": "superbwarfare:claymore_mine"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"display": {
"description": {
"translate": "superbwarfare.advancement.main.best_friend.des"
},
"hidden": true,
"icon": {
"count": 1,
"id": "superbwarfare:claymore_mine"
},
"title": {
"translate": "superbwarfare.advancement.main.best_friend"
}
},
"requirements": [
[
"0"
]
],
"sends_telemetry_event": true
}

View file

@ -0,0 +1,33 @@
{
"parent": "superbwarfare:main/root",
"criteria": {
"0": {
"conditions": {
"items": [
{
"items": "#superbwarfare:blueprint"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"display": {
"description": {
"translate": "superbwarfare.advancement.main.blueprint.des"
},
"icon": {
"count": 1,
"id": "superbwarfare:trachelium_blueprint"
},
"title": {
"translate": "superbwarfare.advancement.main.blueprint"
}
},
"requirements": [
[
"0"
]
],
"sends_telemetry_event": true
}

View file

@ -0,0 +1,28 @@
{
"parent": "superbwarfare:main/root",
"criteria": {
"0": {
"trigger": "superbwarfare:rpg_melee_explosion"
}
},
"display": {
"description": {
"translate": "superbwarfare.advancement.main.boomstick_melee.des"
},
"frame": "challenge",
"hidden": true,
"icon": {
"count": 1,
"id": "superbwarfare:rocket"
},
"title": {
"translate": "superbwarfare.advancement.main.boomstick_melee"
}
},
"requirements": [
[
"0"
]
],
"sends_telemetry_event": true
}

View file

@ -0,0 +1,33 @@
{
"parent": "superbwarfare:main/blueprint",
"criteria": {
"0": {
"conditions": {
"items": [
{
"items": "#superbwarfare:blueprint/cannon"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"display": {
"description": {
"translate": "superbwarfare.advancement.main.cannon_blueprint.des"
},
"icon": {
"count": 1,
"id": "superbwarfare:mk_42_blueprint"
},
"title": {
"translate": "superbwarfare.advancement.main.cannon_blueprint"
}
},
"requirements": [
[
"0"
]
],
"sends_telemetry_event": true
}

View file

@ -0,0 +1,33 @@
{
"parent": "superbwarfare:main/physics_excalibur",
"criteria": {
"0": {
"conditions": {
"items": [
{
"items": "superbwarfare:charging_station"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"display": {
"description": {
"translate": "superbwarfare.advancement.main.clean_energy.des"
},
"icon": {
"count": 1,
"id": "superbwarfare:charging_station"
},
"title": {
"translate": "superbwarfare.advancement.main.clean_energy"
}
},
"requirements": [
[
"0"
]
],
"sends_telemetry_event": true
}

View file

@ -0,0 +1,33 @@
{
"parent": "superbwarfare:main/blueprint",
"criteria": {
"0": {
"conditions": {
"items": [
{
"items": "#superbwarfare:blueprint/common"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"display": {
"description": {
"translate": "superbwarfare.advancement.main.common_blueprint.des"
},
"icon": {
"count": 1,
"id": "superbwarfare:trachelium_blueprint"
},
"title": {
"translate": "superbwarfare.advancement.main.common_blueprint"
}
},
"requirements": [
[
"0"
]
],
"sends_telemetry_event": true
}

View file

@ -0,0 +1,34 @@
{
"parent": "superbwarfare:main/ancient_technology",
"criteria": {
"0": {
"conditions": {
"items": [
{
"items": "superbwarfare:reforging_table"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"display": {
"description": {
"translate": "superbwarfare.advancement.main.enclave.des"
},
"frame": "goal",
"icon": {
"count": 1,
"id": "superbwarfare:reforging_table"
},
"title": {
"translate": "superbwarfare.advancement.main.enclave"
}
},
"requirements": [
[
"0"
]
],
"sends_telemetry_event": true
}

View file

@ -0,0 +1,33 @@
{
"parent": "superbwarfare:main/rare_blueprint",
"criteria": {
"0": {
"conditions": {
"items": [
{
"items": "#superbwarfare:blueprint/epic"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"display": {
"description": {
"translate": "superbwarfare.advancement.main.epic_blueprint.des"
},
"icon": {
"count": 1,
"id": "superbwarfare:trachelium_blueprint"
},
"title": {
"translate": "superbwarfare.advancement.main.epic_blueprint"
}
},
"requirements": [
[
"0"
]
],
"sends_telemetry_event": true
}

View file

@ -0,0 +1,33 @@
{
"parent": "superbwarfare:main/root",
"criteria": {
"0": {
"conditions": {
"items": [
{
"items": "superbwarfare:hammer"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"display": {
"description": {
"translate": "superbwarfare.advancement.main.hammer.des"
},
"icon": {
"count": 1,
"id": "superbwarfare:hammer"
},
"title": {
"translate": "superbwarfare.advancement.main.hammer"
}
},
"requirements": [
[
"0"
]
],
"sends_telemetry_event": true
}

View file

@ -0,0 +1,33 @@
{
"parent": "superbwarfare:main/epic_blueprint",
"criteria": {
"0": {
"conditions": {
"items": [
{
"items": "#superbwarfare:blueprint/legendary"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"display": {
"description": {
"translate": "superbwarfare.advancement.main.legendary_blueprint.des"
},
"icon": {
"count": 1,
"id": "superbwarfare:trachelium_blueprint"
},
"title": {
"translate": "superbwarfare.advancement.main.legendary_blueprint"
}
},
"requirements": [
[
"0"
]
],
"sends_telemetry_event": true
}

View file

@ -0,0 +1,33 @@
{
"parent": "superbwarfare:main/root",
"criteria": {
"0": {
"conditions": {
"items": [
{
"items": "superbwarfare:crowbar"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"display": {
"description": {
"translate": "superbwarfare.advancement.main.physics_excalibur.des"
},
"icon": {
"count": 1,
"id": "superbwarfare:crowbar"
},
"title": {
"translate": "superbwarfare.advancement.main.physics_excalibur"
}
},
"requirements": [
[
"0"
]
],
"sends_telemetry_event": true
}

View file

@ -0,0 +1,33 @@
{
"parent": "superbwarfare:main/common_blueprint",
"criteria": {
"0": {
"conditions": {
"items": [
{
"items": "#superbwarfare:blueprint/rare"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"display": {
"description": {
"translate": "superbwarfare.advancement.main.rare_blueprint.des"
},
"icon": {
"count": 1,
"id": "superbwarfare:trachelium_blueprint"
},
"title": {
"translate": "superbwarfare.advancement.main.rare_blueprint"
}
},
"requirements": [
[
"0"
]
],
"sends_telemetry_event": true
}

View file

@ -0,0 +1,28 @@
{
"criteria": {
"0": {
"trigger": "minecraft:inventory_changed"
}
},
"display": {
"announce_to_chat": false,
"background": "superbwarfare:textures/block/sandbag.png",
"description": {
"translate": "superbwarfare.advancement.main.root.des"
},
"icon": {
"count": 1,
"id": "superbwarfare:taser"
},
"show_toast": false,
"title": {
"translate": "superbwarfare.advancement.main.root"
}
},
"requirements": [
[
"0"
]
],
"sends_telemetry_event": true
}

View file

@ -0,0 +1,33 @@
{
"parent": "superbwarfare:main/clean_energy",
"criteria": {
"0": {
"conditions": {
"items": [
{
"items": "superbwarfare:container"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"display": {
"description": {
"translate": "superbwarfare.advancement.main.super_container.des"
},
"icon": {
"count": 1,
"id": "superbwarfare:container"
},
"title": {
"translate": "superbwarfare.advancement.main.super_container"
}
},
"requirements": [
[
"0"
]
],
"sends_telemetry_event": true
}

View file

@ -55,6 +55,7 @@ public class Mod {
ModRecipes.RECIPE_SERIALIZERS.register(bus);
ModArmorMaterials.MATERIALS.register(bus);
ModAttributes.ATTRIBUTES.register(bus);
ModCriteriaTriggers.REGISTRY.register(bus);
// bus.addListener(this::onCommonSetup);
bus.addListener(this::onClientSetup);

View file

@ -0,0 +1,41 @@
package com.atsuishio.superbwarfare.advancement.criteria;
import com.atsuishio.superbwarfare.init.ModCriteriaTriggers;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import net.minecraft.advancements.Criterion;
import net.minecraft.advancements.critereon.ContextAwarePredicate;
import net.minecraft.advancements.critereon.EntityPredicate;
import net.minecraft.advancements.critereon.SimpleCriterionTrigger;
import net.minecraft.server.level.ServerPlayer;
import java.util.Optional;
public class RPGMeleeExplosionTrigger extends SimpleCriterionTrigger<RPGMeleeExplosionTrigger.TriggerInstance> {
public void trigger(ServerPlayer pPlayer) {
this.trigger(pPlayer, instance -> true);
}
@Override
public Codec<TriggerInstance> codec() {
return TriggerInstance.CODEC;
}
public record TriggerInstance(
Optional<ContextAwarePredicate> player) implements SimpleCriterionTrigger.SimpleInstance {
public static final Codec<RPGMeleeExplosionTrigger.TriggerInstance> CODEC = RecordCodecBuilder.create((instance) ->
instance.group(EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player")
.forGetter(RPGMeleeExplosionTrigger.TriggerInstance::player)).apply(instance, TriggerInstance::new));
public static Criterion<RPGMeleeExplosionTrigger.TriggerInstance> get() {
return ModCriteriaTriggers.RPG_MELEE_EXPLOSION.get().createCriterion(new TriggerInstance(Optional.empty()));
}
@Override
public Optional<ContextAwarePredicate> player() {
return this.player;
}
}
}

View file

@ -28,6 +28,6 @@ public class DataGenerators {
ModBlockTagProvider tagProvider = generator.addProvider(event.includeServer(), new ModBlockTagProvider(packOutput, lookupProvider, existingFileHelper));
generator.addProvider(event.includeServer(), new ModItemTagProvider(packOutput, lookupProvider, tagProvider.contentsGetter(), existingFileHelper));
generator.addProvider(event.includeServer(), new ModDamageTypeTagProvider(packOutput, lookupProvider, existingFileHelper));
// generator.addProvider(event.includeServer(), new ModAdvancementProvider(packOutput, existingFileHelper));
generator.addProvider(event.includeServer(), new ModAdvancementProvider(packOutput, lookupProvider, existingFileHelper));
}
}

View file

@ -0,0 +1,197 @@
package com.atsuishio.superbwarfare.datagen;
import com.atsuishio.superbwarfare.Mod;
import net.minecraft.ChatFormatting;
import net.minecraft.advancements.*;
import net.minecraft.advancements.critereon.*;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.block.Block;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.UnaryOperator;
/**
* Codes Based on @Create
*/
@SuppressWarnings("unused")
public class ModAdvancement {
public static final ResourceLocation MAIN_BACKGROUND = Mod.loc("textures/block/sandbag.png");
public static final ResourceLocation LEGENDARY_BACKGROUND = Mod.loc("textures/block/steel_block.png");
private final Advancement.Builder builder;
private ModAdvancement parent;
public AdvancementHolder result;
private final String id;
private final Group group;
public ModAdvancement(String id, UnaryOperator<Builder> b) {
this.builder = Advancement.Builder.advancement();
this.id = id;
Builder builtInBuilder = new Builder();
b.apply(builtInBuilder);
this.group = builtInBuilder.group;
Optional<ResourceLocation> bg = Optional.empty();
if (id.equals("root")) {
if (group == Group.MAIN) {
bg = Optional.of(MAIN_BACKGROUND);
}
if (group == Group.LEGENDARY) {
bg = Optional.of(LEGENDARY_BACKGROUND);
}
}
builder.display(new DisplayInfo(builtInBuilder.icon, titleComponent(),
Component.translatable(description()), bg,
builtInBuilder.type.frame, builtInBuilder.type.toast, builtInBuilder.type.announce, builtInBuilder.type.hide));
ModAdvancementProvider.ADVANCEMENTS.add(this);
}
private String title() {
return Mod.MODID + ".advancement." + group.path + "." + id;
}
private Component titleComponent() {
if (this.group == Group.LEGENDARY && !this.id.equals("root")) {
return Component.translatable(title()).withStyle(ChatFormatting.GOLD);
}
return Component.translatable(title());
}
private String description() {
return title() + ".des";
}
public void save(Consumer<AdvancementHolder> t) {
if (parent != null) {
builder.parent(parent.result);
}
AdvancementHolder advancementholder = builder.build(Mod.loc(group.path + "/" + id));
t.accept(advancementholder);
result = advancementholder;
}
enum Type {
DEFAULT(AdvancementType.TASK, true, true, false),
DEFAULT_NO_ANNOUNCE(AdvancementType.TASK, true, false, false),
DEFAULT_CHALLENGE(AdvancementType.CHALLENGE, true, true, false),
SILENT(AdvancementType.TASK, false, false, false),
GOAL(AdvancementType.GOAL, true, true, false),
SECRET(AdvancementType.TASK, true, true, true),
SECRET_CHALLENGE(AdvancementType.CHALLENGE, true, true, true);
private final AdvancementType frame;
private final boolean toast;
private final boolean announce;
private final boolean hide;
Type(AdvancementType frame, boolean toast, boolean announce, boolean hide) {
this.frame = frame;
this.toast = toast;
this.announce = announce;
this.hide = hide;
}
}
enum Group {
MAIN("main"),
LEGENDARY("legendary");
public final String path;
Group(String path) {
this.path = path;
}
}
public class Builder {
private Type type = Type.DEFAULT;
private int keyIndex;
private ItemStack icon;
private Group group = Group.MAIN;
Builder type(Type type) {
this.type = type;
return this;
}
Builder parent(ModAdvancement other) {
ModAdvancement.this.parent = other;
return this;
}
Builder icon(ItemLike item) {
return icon(new ItemStack(item));
}
Builder icon(ItemStack stack) {
icon = stack;
return this;
}
Builder whenBlockPlaced(Block block) {
return externalTrigger(ItemUsedOnLocationTrigger.TriggerInstance.placedBlock(block));
}
Builder whenIconCollected() {
return externalTrigger(InventoryChangeTrigger.TriggerInstance.hasItems(icon.getItem()));
}
Builder whenItemCollected(ItemLike itemProvider) {
return externalTrigger(InventoryChangeTrigger.TriggerInstance.hasItems(itemProvider));
}
Builder whenItemCollected(TagKey<Item> tag) {
return externalTrigger(InventoryChangeTrigger.TriggerInstance
.hasItems(ItemPredicate.Builder.item().of(tag).build()));
}
Builder whenItemConsumed(ItemLike itemProvider) {
return externalTrigger(ConsumeItemTrigger.TriggerInstance.usedItem(itemProvider));
}
Builder whenIconConsumed() {
return externalTrigger(ConsumeItemTrigger.TriggerInstance.usedItem(icon.getItem()));
}
Builder awardedForFree() {
return externalTrigger(InventoryChangeTrigger.TriggerInstance.hasItems(new ItemLike[]{}));
}
Builder whenEffectChanged(MobEffectsPredicate.Builder predicate) {
return externalTrigger(EffectsChangedTrigger.TriggerInstance.hasEffects(predicate));
}
Builder externalTrigger(Criterion<?> trigger) {
builder.addCriterion(String.valueOf(keyIndex), trigger);
keyIndex++;
return this;
}
Builder requirement(AdvancementRequirements requirements) {
builder.requirements(requirements);
return this;
}
Builder group(Group group) {
this.group = group;
return this;
}
Builder rewardExp(int exp) {
builder.rewards(AdvancementRewards.Builder.experience(exp).build());
return this;
}
}
}

View file

@ -0,0 +1,151 @@
package com.atsuishio.superbwarfare.datagen;
import com.atsuishio.superbwarfare.advancement.criteria.RPGMeleeExplosionTrigger;
import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModTags;
import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.AdvancementHolder;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.CachedOutput;
import net.minecraft.data.DataProvider;
import net.minecraft.data.PackOutput;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.PackType;
import net.neoforged.neoforge.common.data.ExistingFileHelper;
import org.jetbrains.annotations.NotNull;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.function.Consumer;
import java.util.function.UnaryOperator;
/**
* Codes Based on @Create
*/
public class ModAdvancementProvider implements DataProvider {
private final PackOutput packOutput;
private final ExistingFileHelper existingFileHelper;
private final CompletableFuture<HolderLookup.Provider> registries;
public static final List<ModAdvancement> ADVANCEMENTS = new ArrayList<>();
@SuppressWarnings("unused")
public static ModAdvancement START = null,
/**
* Main
*/
MAIN_ROOT = advancement("root", builder -> builder.icon(ModItems.TASER.get())
.type(ModAdvancement.Type.SILENT)
.awardedForFree()),
BEST_FRIEND = advancement("best_friend", builder -> builder.icon(ModItems.CLAYMORE_MINE.get())
.whenIconCollected()
.type(ModAdvancement.Type.SECRET)
.parent(MAIN_ROOT)),
BANZAI = advancement("banzai", builder -> builder.icon(ModItems.LUNGE_MINE.get())
.whenIconCollected()
.parent(MAIN_ROOT)),
HAMMER = advancement("hammer", builder -> builder.icon(ModItems.HAMMER.get())
.whenIconCollected()
.parent(MAIN_ROOT)),
PHYSICS_EXCALIBUR = advancement("physics_excalibur", builder -> builder.icon(ModItems.CROWBAR.get())
.whenIconCollected()
.parent(MAIN_ROOT)),
CLEAN_ENERGY = advancement("clean_energy", builder -> builder.icon(ModItems.CHARGING_STATION.get())
.whenIconCollected()
.parent(PHYSICS_EXCALIBUR)),
SUPER_CONTAINER = advancement("super_container", builder -> builder.icon(ModItems.CONTAINER.get())
.whenIconCollected()
.parent(CLEAN_ENERGY)),
// 蓝图
BLUEPRINT = advancement("blueprint", builder -> builder.icon(ModItems.TRACHELIUM_BLUEPRINT.get())
.whenItemCollected(ModTags.Items.BLUEPRINT)
.parent(MAIN_ROOT)),
COMMON_BLUEPRINT = advancement("common_blueprint", builder -> builder.icon(ModItems.TRACHELIUM_BLUEPRINT.get())
.whenItemCollected(ModTags.Items.COMMON_BLUEPRINT)
.parent(BLUEPRINT)),
RARE_BLUEPRINT = advancement("rare_blueprint", builder -> builder.icon(ModItems.TRACHELIUM_BLUEPRINT.get())
.whenItemCollected(ModTags.Items.RARE_BLUEPRINT)
.parent(COMMON_BLUEPRINT)),
EPIC_BLUEPRINT = advancement("epic_blueprint", builder -> builder.icon(ModItems.TRACHELIUM_BLUEPRINT.get())
.whenItemCollected(ModTags.Items.EPIC_BLUEPRINT)
.parent(RARE_BLUEPRINT)),
LEGENDARY_BLUEPRINT = advancement("legendary_blueprint", builder -> builder.icon(ModItems.TRACHELIUM_BLUEPRINT.get())
.whenItemCollected(ModTags.Items.LEGENDARY_BLUEPRINT)
.parent(EPIC_BLUEPRINT)),
CANNON_BLUEPRINT = advancement("cannon_blueprint", builder -> builder.icon(ModItems.MK_42_BLUEPRINT.get())
.whenItemCollected(ModTags.Items.CANNON_BLUEPRINT)
.parent(BLUEPRINT)),
// 古代芯片
ANCIENT_TECHNOLOGY = advancement("ancient_technology", builder -> builder.icon(ModItems.ANCIENT_CPU.get())
.whenIconCollected()
.type(ModAdvancement.Type.GOAL)
.parent(MAIN_ROOT)),
ENCLAVE = advancement("enclave", builder -> builder.icon(ModItems.REFORGING_TABLE.get())
.whenIconCollected()
.type(ModAdvancement.Type.GOAL)
.parent(ANCIENT_TECHNOLOGY)),
// 哑弹棒
BOOMSTICK_MELEE = advancement("boomstick_melee", builder -> builder.icon(ModItems.ROCKET.get())
.externalTrigger(RPGMeleeExplosionTrigger.TriggerInstance.get())
.type(ModAdvancement.Type.SECRET_CHALLENGE)
.parent(MAIN_ROOT)),
END = null;
public ModAdvancementProvider(PackOutput output, CompletableFuture<HolderLookup.Provider> lookupProvider, ExistingFileHelper existingFileHelper) {
this.packOutput = output;
this.existingFileHelper = existingFileHelper;
this.registries = lookupProvider;
}
private static ModAdvancement advancement(String id, UnaryOperator<ModAdvancement.Builder> b) {
return new ModAdvancement(id, b);
}
@Override
public @NotNull CompletableFuture<?> run(@NotNull CachedOutput output) {
List<CompletableFuture<?>> futures = new ArrayList<>();
PackOutput.PathProvider pathProvider = packOutput.createPathProvider(PackOutput.Target.DATA_PACK, "advancement");
return this.registries.thenCompose(provider -> {
Consumer<AdvancementHolder> consumer = advancementHolder -> {
ResourceLocation id = advancementHolder.id();
if (existingFileHelper.exists(id, PackType.SERVER_DATA, ".json", "advancement")) {
throw new IllegalStateException("Duplicate advancement " + id);
}
Path path = pathProvider.json(advancementHolder.id());
futures.add(DataProvider.saveStable(output, provider, Advancement.CODEC, advancementHolder.value(), path));
};
for (ModAdvancement advancement : ADVANCEMENTS) {
advancement.save(consumer);
}
return CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new));
});
}
@Override
public @NotNull String getName() {
return "Superb Warfare Advancements";
}
}

View file

@ -0,0 +1,16 @@
package com.atsuishio.superbwarfare.init;
import com.atsuishio.superbwarfare.Mod;
import com.atsuishio.superbwarfare.advancement.criteria.RPGMeleeExplosionTrigger;
import net.minecraft.advancements.CriterionTrigger;
import net.minecraft.core.registries.Registries;
import net.neoforged.neoforge.registries.DeferredRegister;
import java.util.function.Supplier;
public class ModCriteriaTriggers {
public static final DeferredRegister<CriterionTrigger<?>> REGISTRY = DeferredRegister.create(Registries.TRIGGER_TYPE, Mod.MODID);
public static final Supplier<RPGMeleeExplosionTrigger> RPG_MELEE_EXPLOSION = REGISTRY.register("rpg_melee_explosion", RPGMeleeExplosionTrigger::new);
}

View file

@ -12,7 +12,7 @@ import net.neoforged.neoforge.registries.DeferredRegister;
@SuppressWarnings("unused")
public class ModRecipes {
// TODO recipe serializer 为什么无效
public static final DeferredRegister<RecipeSerializer<?>> RECIPE_SERIALIZERS = DeferredRegister.create(BuiltInRegistries.RECIPE_SERIALIZER, Mod.MODID);
public static final DeferredHolder<RecipeSerializer<?>, RecipeSerializer<PotionMortarShellRecipe>> POTION_MORTAR_SHELL_SERIALIZER =
@ -22,5 +22,4 @@ public class ModRecipes {
RECIPE_SERIALIZERS.register("ammo_box_add_ammo", () -> new SimpleCraftingRecipeSerializer<>(AmmoBoxAddAmmoRecipe::new));
public static final DeferredHolder<RecipeSerializer<?>, SimpleCraftingRecipeSerializer<AmmoBoxExtractAmmoRecipe>> AMMO_BOX_EXTRACT_AMMO_SERIALIZER =
RECIPE_SERIALIZERS.register("ammo_box_extract_ammo", () -> new SimpleCraftingRecipeSerializer<>(AmmoBoxExtractAmmoRecipe::new));
}

View file

@ -4,6 +4,7 @@ import com.atsuishio.superbwarfare.Mod;
import com.atsuishio.superbwarfare.client.PoseTool;
import com.atsuishio.superbwarfare.client.renderer.item.RocketItemRenderer;
import com.atsuishio.superbwarfare.entity.projectile.RpgRocketEntity;
import com.atsuishio.superbwarfare.init.ModCriteriaTriggers;
import com.atsuishio.superbwarfare.init.ModEntities;
import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.tools.ParticleTool;
@ -112,8 +113,7 @@ public class Rocket extends Item implements GeoItem, ProjectileItem {
}
if (source instanceof ServerPlayer player) {
// TODO criteria
// CriteriaRegister.RPG_MELEE_EXPLOSION.trigger(player);
ModCriteriaTriggers.RPG_MELEE_EXPLOSION.get().trigger(player);
if (!player.isCreative()) {
stack.shrink(1);
}