尝试调整物品模型生成方法
This commit is contained in:
parent
447313ccc9
commit
c575c5ce81
7 changed files with 146 additions and 1 deletions
|
@ -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
|
||||||
|
|
|
@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "superbwarfare:displaysettings/aurelia_sceptre.item",
|
||||||
|
"textures": {
|
||||||
|
"layer0": "superbwarfare:item/aurelia_sceptre"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:item/generated",
|
||||||
|
"textures": {
|
||||||
|
"layer0": "superbwarfare:item/aurelia_sceptre_icon"
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue