diff --git a/build.gradle b/build.gradle index a5f3106..6475cf8 100644 --- a/build.gradle +++ b/build.gradle @@ -42,6 +42,9 @@ dependencies { //modCompileOnly "com.viaversion:viaversion-api:4.7.0-SNAPSHOT" modCompileOnly "dev.gegy:player-roles-api:${project.player_roles_version}" + + modImplementation "eu.pb4:polymer-resource-pack-extras:${project.rp_extras_version}" + modImplementation "eu.pb4:polymer-autohost:${project.autohost_version}" } test { diff --git a/gradle.properties b/gradle.properties index 72fe11d..a1911c8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,3 +16,6 @@ factorytools_version=0.7.1+1.21.6 mod_version=1.3.3 maven_group=xyz.nucleoid archives_base_name=nucleoid-extras + +rp_extras_version=0.11.2+1.21.4 +autohost_version=0.11.2+1.21.4 diff --git a/src/datagen/java/xyz/nucleoid/extras/data/NEDatagen.java b/src/datagen/java/xyz/nucleoid/extras/data/NEDatagen.java index b8b16cc..41f0e5e 100644 --- a/src/datagen/java/xyz/nucleoid/extras/data/NEDatagen.java +++ b/src/datagen/java/xyz/nucleoid/extras/data/NEDatagen.java @@ -9,11 +9,14 @@ public class NEDatagen implements DataGeneratorEntrypoint { public void onInitializeDataGenerator(FabricDataGenerator dataGenerator) { var pack = dataGenerator.createPack(); - pack.addProvider(NEAdvancementProvider::new); + // Assets pack.addProvider(NEAssetProvider::new); - pack.addProvider(NEDialogTagProvider::new); + pack.addProvider(NEModelProvider::new); + // Data + pack.addProvider(NEAdvancementProvider::new); var blockTags = pack.addProvider(NEBlockTagProvider::new); pack.addProvider((dataOutput, registries) -> new NEItemTagProvider(dataOutput, registries, blockTags)); + pack.addProvider(NEDialogTagProvider::new); } } diff --git a/src/datagen/java/xyz/nucleoid/extras/data/provider/NEModelProvider.java b/src/datagen/java/xyz/nucleoid/extras/data/provider/NEModelProvider.java new file mode 100644 index 0000000..e5f1334 --- /dev/null +++ b/src/datagen/java/xyz/nucleoid/extras/data/provider/NEModelProvider.java @@ -0,0 +1,80 @@ +package xyz.nucleoid.extras.data.provider; + +import com.google.common.hash.HashCode; +import eu.pb4.polymer.resourcepack.api.AssetPaths; +import eu.pb4.polymer.resourcepack.extras.api.format.item.ItemAsset; +import eu.pb4.polymer.resourcepack.extras.api.format.item.model.BasicItemModel; +import eu.pb4.polymer.resourcepack.extras.api.format.model.ModelAsset; +import eu.pb4.polymer.resourcepack.extras.api.format.model.ModelTransformation; +import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; +import net.minecraft.data.DataOutput; +import net.minecraft.data.DataProvider; +import net.minecraft.data.DataWriter; +import net.minecraft.item.ItemDisplayContext; +import net.minecraft.util.Identifier; +import net.minecraft.util.Util; +import net.minecraft.util.math.Vec3d; +import xyz.nucleoid.extras.NucleoidExtras; +import xyz.nucleoid.extras.model.NEModels; + +import java.io.IOException; +import java.util.HashMap; +import java.util.concurrent.CompletableFuture; +import java.util.function.BiConsumer; + +public class NEModelProvider implements DataProvider { + private static final String NAME = NucleoidExtras.identifier("model_provider").toString(); + + private final DataOutput output; + private final HashMap assetMap; + private final HashMap modelMap; + + public NEModelProvider(FabricDataOutput output) { + this.output = output; + this.assetMap = new HashMap<>(); + this.modelMap = new HashMap<>(); + } + + public void runWriters(BiConsumer assetWriter) { + createItems(); + this.assetMap.forEach((id, asset) -> assetWriter.accept(AssetPaths.itemAsset(id), asset.toBytes())); + this.modelMap.forEach((id, asset) -> assetWriter.accept(AssetPaths.itemModel(id), asset.toBytes())); + } + + private void createItems() { + spriteItem(NEModels.CONTROLLER); + } + + private void spriteItem(Identifier id) { + this.assetMap.put(id, new ItemAsset(new BasicItemModel(id.withPrefixedPath("item/")), ItemAsset.Properties.DEFAULT)); + this.modelMap.put(id, ModelAsset.builder() + .parent(Identifier.of("item/generated")) + .texture("layer0", id.withPrefixedPath("item/").toString()) + .transformation(ItemDisplayContext.FIRST_PERSON_RIGHT_HAND, new ModelTransformation( + new Vec3d(-15, 0, 0), + new Vec3d(-9, 3.2, 1.13), + new Vec3d(0.68, 0.68, 0.68) + )) + .build()); + } + + @Override + public CompletableFuture run(DataWriter writer) { + BiConsumer assetWriter = (path, data) -> { + try { + writer.write(this.output.getPath().resolve(path), data, HashCode.fromBytes(data)); + } catch (IOException e) { + e.printStackTrace(); + } + }; + return CompletableFuture.runAsync(() -> { + this. + runWriters(assetWriter); + }, Util.getMainWorkerExecutor()); + } + + @Override + public String getName() { + return NAME; + } +} diff --git a/src/main/java/xyz/nucleoid/extras/NucleoidExtras.java b/src/main/java/xyz/nucleoid/extras/NucleoidExtras.java index 5f8220c..c202582 100644 --- a/src/main/java/xyz/nucleoid/extras/NucleoidExtras.java +++ b/src/main/java/xyz/nucleoid/extras/NucleoidExtras.java @@ -70,7 +70,11 @@ public void onInitialize() { NucleoidExtrasNetworking.register(); GuiTextures.register(); - PolymerResourcePackUtils.addModAssets(ID); + if (PolymerResourcePackUtils.addModAssets(ID)) { + LOGGER.info("Successfully added mod assets for " + ID); + } else { + LOGGER.error("Failed to add mod assets for " + ID); + } //new DuckFixerUpper().onInitialize(); } diff --git a/src/main/java/xyz/nucleoid/extras/lobby/item/GamePortalOpenerItem.java b/src/main/java/xyz/nucleoid/extras/lobby/item/GamePortalOpenerItem.java index 473249c..1fe24fa 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/item/GamePortalOpenerItem.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/item/GamePortalOpenerItem.java @@ -1,6 +1,7 @@ package xyz.nucleoid.extras.lobby.item; import eu.pb4.polymer.core.api.item.PolymerItem; +import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -13,6 +14,7 @@ import net.minecraft.world.World; import xyz.nucleoid.extras.component.GamePortalComponent; import xyz.nucleoid.extras.component.NEDataComponentTypes; +import xyz.nucleoid.extras.model.NEModels; import xyz.nucleoid.packettweaker.PacketContext; import xyz.nucleoid.plasmid.impl.portal.GamePortal; @@ -45,6 +47,9 @@ public Item getPolymerItem(ItemStack stack, PacketContext context) { @Override public Identifier getPolymerItemModel(ItemStack stack, PacketContext context) { + if (PolymerResourcePackUtils.hasMainPack(context)) { + return NEModels.CONTROLLER; + } return null; } diff --git a/src/main/java/xyz/nucleoid/extras/model/NEModels.java b/src/main/java/xyz/nucleoid/extras/model/NEModels.java new file mode 100644 index 0000000..e565622 --- /dev/null +++ b/src/main/java/xyz/nucleoid/extras/model/NEModels.java @@ -0,0 +1,12 @@ +package xyz.nucleoid.extras.model; + +import net.minecraft.util.Identifier; +import xyz.nucleoid.extras.NucleoidExtras; + +public class NEModels { + public static final Identifier CONTROLLER = of("controller"); + + private static Identifier of(String path) { + return NucleoidExtras.identifier(path); + } +} diff --git a/src/main/resources/assets/nucleoid_extras/textures/item/controller.png b/src/main/resources/assets/nucleoid_extras/textures/item/controller.png new file mode 100644 index 0000000..d678ae2 Binary files /dev/null and b/src/main/resources/assets/nucleoid_extras/textures/item/controller.png differ