尝试调整物品模型生成方法

This commit is contained in:
17146 2025-05-21 17:29:48 +08:00 committed by Light_Quanta
parent 447313ccc9
commit c575c5ce81
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
7 changed files with 146 additions and 1 deletions

View file

@ -1,4 +1,4 @@
// 1.21.1 2025-05-13T23:50:15.1356608 Item Models: superbwarfare // 1.21.1 2025-05-21T21:13:24.0760608 Item Models: superbwarfare
13ca8d5676888ff51f3308d88e4bf67691fa34f8 assets/superbwarfare/models/item/aa_12_blueprint.json 13ca8d5676888ff51f3308d88e4bf67691fa34f8 assets/superbwarfare/models/item/aa_12_blueprint.json
0a9bfb695c2b5668863a2de4770f5bfca663c1dc assets/superbwarfare/models/item/agm.json 0a9bfb695c2b5668863a2de4770f5bfca663c1dc assets/superbwarfare/models/item/agm.json
29ad5daadcdf7c10771fc45b649c527d16325cbb assets/superbwarfare/models/item/aircraft_catapult.json 29ad5daadcdf7c10771fc45b649c527d16325cbb assets/superbwarfare/models/item/aircraft_catapult.json
@ -7,6 +7,9 @@
c993bddc0db9453ffbefa59f9ac9a74dba909038 assets/superbwarfare/models/item/ancient_cpu.json c993bddc0db9453ffbefa59f9ac9a74dba909038 assets/superbwarfare/models/item/ancient_cpu.json
a5cf666a970906ba6ac0af9a4d5d52dd0e093dec assets/superbwarfare/models/item/annihilator_blueprint.json a5cf666a970906ba6ac0af9a4d5d52dd0e093dec assets/superbwarfare/models/item/annihilator_blueprint.json
4b8fe8fbe5e64c3449ad539317254e4ed7188411 assets/superbwarfare/models/item/ap_head.json 4b8fe8fbe5e64c3449ad539317254e4ed7188411 assets/superbwarfare/models/item/ap_head.json
0d41599d73bef0eefd40b54bb4940fe2e8e03da6 assets/superbwarfare/models/item/aurelia_sceptre.json
47b117e79990f208022980edf27898c559c715f4 assets/superbwarfare/models/item/aurelia_sceptre_base.json
a207f0f01b87315d1b85fc3ea69bf52b2bd5c71a assets/superbwarfare/models/item/aurelia_sceptre_icon.json
984c08ca6f6893a15721a85e30118f9e32c65c7f assets/superbwarfare/models/item/barbed_wire.json 984c08ca6f6893a15721a85e30118f9e32c65c7f assets/superbwarfare/models/item/barbed_wire.json
e8f16946c6f9429989d05e9ec250a72ffc64f9e1 assets/superbwarfare/models/item/beam_test.json e8f16946c6f9429989d05e9ec250a72ffc64f9e1 assets/superbwarfare/models/item/beam_test.json
bda38dd5cb3ca4c3e289a012c0529609ac02ded2 assets/superbwarfare/models/item/beast.json bda38dd5cb3ca4c3e289a012c0529609ac02ded2 assets/superbwarfare/models/item/beast.json

View file

@ -0,0 +1,28 @@
{
"parent": "minecraft:item/generated",
"base": {
"parent": "superbwarfare:item/aurelia_sceptre_base"
},
"gui_light": "front",
"loader": "neoforge:separate_transforms",
"perspectives": {
"fixed": {
"parent": "superbwarfare:lod/aurelia_sceptre"
},
"ground": {
"parent": "superbwarfare:lod/aurelia_sceptre"
},
"gui": {
"parent": "superbwarfare:item/aurelia_sceptre_icon"
},
"head": {
"parent": "superbwarfare:lod/aurelia_sceptre"
},
"thirdperson_lefthand": {
"parent": "superbwarfare:lod/aurelia_sceptre"
},
"thirdperson_righthand": {
"parent": "superbwarfare:lod/aurelia_sceptre"
}
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "superbwarfare:displaysettings/aurelia_sceptre.item",
"textures": {
"layer0": "superbwarfare:item/aurelia_sceptre"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "superbwarfare:item/aurelia_sceptre_icon"
}
}

View file

@ -0,0 +1,61 @@
package com.atsuishio.superbwarfare.datagen;
import com.google.common.base.Preconditions;
import com.google.gson.JsonObject;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemDisplayContext;
import net.neoforged.neoforge.client.model.generators.CustomLoaderBuilder;
import net.neoforged.neoforge.client.model.generators.ModelBuilder;
import net.neoforged.neoforge.common.data.ExistingFileHelper;
import org.jetbrains.annotations.NotNull;
import java.util.LinkedHashMap;
import java.util.Map;
public class CustomSeparateModelBuilder<T extends ModelBuilder<T>> extends CustomLoaderBuilder<T> {
public static <T extends ModelBuilder<T>> CustomSeparateModelBuilder<T> begin(T parent, ExistingFileHelper existingFileHelper) {
return new CustomSeparateModelBuilder<>(parent, existingFileHelper);
}
private String base;
private final Map<String, String> childModels = new LinkedHashMap<>();
protected CustomSeparateModelBuilder(T parent, ExistingFileHelper existingFileHelper) {
super(ResourceLocation.parse("neoforge:separate_transforms"), parent, existingFileHelper, true);
}
public CustomSeparateModelBuilder<T> base(String location) {
Preconditions.checkNotNull(location, "location must not be null");
base = location;
return this;
}
public CustomSeparateModelBuilder<T> perspective(ItemDisplayContext perspective, String location) {
Preconditions.checkNotNull(perspective, "perspective must not be null");
Preconditions.checkNotNull(location, "location must not be null");
childModels.put(perspective.getSerializedName(), location);
return this;
}
@Override
public @NotNull JsonObject toJson(@NotNull JsonObject json) {
json = super.toJson(json);
if (this.base != null) {
var base = new JsonObject();
base.addProperty("parent", this.base);
json.add("base", base);
}
JsonObject parts = new JsonObject();
for (Map.Entry<String, String> entry : childModels.entrySet()) {
var part = new JsonObject();
part.addProperty("parent", entry.getValue());
parts.add(entry.getKey(), part);
}
json.add("perspectives", parts);
return json;
}
}

View file

@ -4,13 +4,16 @@ import com.atsuishio.superbwarfare.Mod;
import com.atsuishio.superbwarfare.init.ModBlocks; import com.atsuishio.superbwarfare.init.ModBlocks;
import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.item.common.BlueprintItem; import com.atsuishio.superbwarfare.item.common.BlueprintItem;
import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.data.PackOutput; import net.minecraft.data.PackOutput;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.neoforged.neoforge.client.model.generators.ItemModelBuilder; import net.neoforged.neoforge.client.model.generators.ItemModelBuilder;
import net.neoforged.neoforge.client.model.generators.ItemModelProvider; import net.neoforged.neoforge.client.model.generators.ItemModelProvider;
import net.neoforged.neoforge.client.model.generators.ModelFile;
import net.neoforged.neoforge.common.data.ExistingFileHelper; import net.neoforged.neoforge.common.data.ExistingFileHelper;
import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredHolder;
@ -23,6 +26,9 @@ public class ModItemModelProvider extends ItemModelProvider {
@Override @Override
protected void registerModels() { protected void registerModels() {
// test
gunItem(ModItems.AURELIA_SCEPTRE);
simpleItem(ModItems.EMPTY_PERK, "perk/"); simpleItem(ModItems.EMPTY_PERK, "perk/");
simpleItem(ModItems.MORTAR_SHELL); simpleItem(ModItems.MORTAR_SHELL);
@ -205,4 +211,39 @@ public class ModItemModelProvider extends ItemModelProvider {
return withExistingParent(item.getId().getPath(), ResourceLocation.withDefaultNamespace("item/handheld")) return withExistingParent(item.getId().getPath(), ResourceLocation.withDefaultNamespace("item/handheld"))
.texture("layer0", Mod.loc("item/" + item.getId().getPath())); .texture("layer0", Mod.loc("item/" + item.getId().getPath()));
} }
private ItemModelBuilder gunIcon(DeferredHolder<Item, ? extends Item> item) {
return withExistingParent(item.getId().getPath() + "_icon", ResourceLocation.withDefaultNamespace("item/generated"))
.texture("layer0", Mod.loc("item/" + item.getId().getPath() + "_icon"));
}
private ItemModelBuilder gunBase(DeferredHolder<Item, ? extends Item> item) {
return getBuilder(item.getId().getPath() + "_base")
.parent(new ModelFile.UncheckedModelFile(modLoc("displaysettings/" + item.getId().getPath() + ".item")))
.texture("layer0", Mod.loc("item/" + item.getId().getPath()));
}
private ItemModelBuilder customSeparatedGunModel(DeferredHolder<Item, ? extends Item> item) {
String lod = modLoc("lod/" + item.getId().getPath()).toString();
String base = modLoc("item/" + item.getId().getPath() + "_base").toString();
String icon = modLoc("item/" + item.getId().getPath() + "_icon").toString();
return withExistingParent(item.getId().getPath(), ResourceLocation.withDefaultNamespace("item/generated"))
.guiLight(BlockModel.GuiLight.FRONT)
.customLoader(CustomSeparateModelBuilder::begin)
.base(base)
.perspective(ItemDisplayContext.FIXED, lod)
.perspective(ItemDisplayContext.HEAD, lod)
.perspective(ItemDisplayContext.GROUND, lod)
.perspective(ItemDisplayContext.THIRD_PERSON_RIGHT_HAND, lod)
.perspective(ItemDisplayContext.THIRD_PERSON_LEFT_HAND, lod)
.perspective(ItemDisplayContext.GUI, icon)
.end();
}
private void gunItem(DeferredHolder<Item, ? extends Item> item) {
this.gunIcon(item);
this.gunBase(item);
this.customSeparatedGunModel(item);
}
} }