From 0a392ae9a8d48c503423f24196475664d8112e5c Mon Sep 17 00:00:00 2001 From: Hugman Date: Mon, 16 Dec 2024 01:22:08 +0100 Subject: [PATCH 1/2] Add a game controller icon for the game portal opener item --- build.gradle | 2 ++ gradle.properties | 2 ++ .../java/xyz/nucleoid/extras/NucleoidExtras.java | 7 +++++++ .../extras/lobby/item/GamePortalOpenerItem.java | 6 ++++++ .../assets/nucleoid_extras/items/controller.json | 6 ++++++ .../nucleoid_extras/models/item/controller.json | 6 ++++++ .../nucleoid_extras/textures/item/controller.png | Bin 0 -> 247 bytes 7 files changed, 29 insertions(+) create mode 100644 src/main/resources/assets/nucleoid_extras/items/controller.json create mode 100644 src/main/resources/assets/nucleoid_extras/models/item/controller.json create mode 100644 src/main/resources/assets/nucleoid_extras/textures/item/controller.png diff --git a/build.gradle b/build.gradle index 4b91552..0b168cb 100644 --- a/build.gradle +++ b/build.gradle @@ -40,6 +40,8 @@ dependencies { //modCompileOnly "com.viaversion:viaversion-api:4.7.0-SNAPSHOT" modCompileOnly "dev.gegy:player-roles-api:1.6.13" + + modImplementation "eu.pb4:polymer-autohost:${project.autohost_version}" } test { diff --git a/gradle.properties b/gradle.properties index 7a9b9ed..4e3b7b4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,3 +13,5 @@ fabric_version=0.110.5+1.21.4 mod_version=1.3.2 maven_group=xyz.nucleoid archives_base_name=nucleoid-extras + +autohost_version=0.11.2+1.21.4 diff --git a/src/main/java/xyz/nucleoid/extras/NucleoidExtras.java b/src/main/java/xyz/nucleoid/extras/NucleoidExtras.java index cd77f19..0d2d696 100644 --- a/src/main/java/xyz/nucleoid/extras/NucleoidExtras.java +++ b/src/main/java/xyz/nucleoid/extras/NucleoidExtras.java @@ -1,6 +1,7 @@ package xyz.nucleoid.extras; import eu.pb4.playerdata.api.PlayerDataApi; +import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; @@ -65,6 +66,12 @@ public void onInitialize() { ServerLifecycleEvents.SERVER_STOPPED.register(NucleoidExtras::onServerStopped); ServerPlayConnectionEvents.JOIN.register(NucleoidExtras::onPlayerJoin); NucleoidExtrasNetworking.register(); + + if (PolymerResourcePackUtils.addModAssets(ID)) { + LOGGER.info("Successfully added mod assets for " + ID); + } else { + LOGGER.error("Failed to add mod assets for " + ID); + } } private static void onServerStopped(MinecraftServer server) { 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..8fe12fd 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,8 @@ package xyz.nucleoid.extras.lobby.item; +import com.mojang.authlib.GameProfile; 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; @@ -11,6 +13,7 @@ import net.minecraft.util.Hand; import net.minecraft.util.Identifier; import net.minecraft.world.World; +import xyz.nucleoid.extras.NucleoidExtras; import xyz.nucleoid.extras.component.GamePortalComponent; import xyz.nucleoid.extras.component.NEDataComponentTypes; import xyz.nucleoid.packettweaker.PacketContext; @@ -45,6 +48,9 @@ public Item getPolymerItem(ItemStack stack, PacketContext context) { @Override public Identifier getPolymerItemModel(ItemStack stack, PacketContext context) { + if(PolymerResourcePackUtils.hasMainPack(context)) { + return NucleoidExtras.identifier("controller"); + } return null; } diff --git a/src/main/resources/assets/nucleoid_extras/items/controller.json b/src/main/resources/assets/nucleoid_extras/items/controller.json new file mode 100644 index 0000000..280e3a0 --- /dev/null +++ b/src/main/resources/assets/nucleoid_extras/items/controller.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "nucleoid_extras:item/controller" + } +} diff --git a/src/main/resources/assets/nucleoid_extras/models/item/controller.json b/src/main/resources/assets/nucleoid_extras/models/item/controller.json new file mode 100644 index 0000000..5a1d3d4 --- /dev/null +++ b/src/main/resources/assets/nucleoid_extras/models/item/controller.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "nucleoid_extras:item/controller" + } +} 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 0000000000000000000000000000000000000000..526549558ebd830b0564535b120ee73dbf41a400 GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~l>na*S0F7R zAuTVjY-(y@X=!a|=MWeY8XFsTQB~Fcw9%vU3JOh+8p9nn0oC!81o;Is{6_%JBLQka z@k~z_#}J9Bz5U)|&Waq)yeiA)|9!um Date: Thu, 19 Dec 2024 12:31:46 +0100 Subject: [PATCH 2/2] Generate assets --- build.gradle | 1 + gradle.properties | 1 + .../xyz/nucleoid/extras/data/NEDatagen.java | 2 + .../extras/data/provider/NEModelProvider.java | 69 +++++++++++++++++++ .../lobby/item/GamePortalOpenerItem.java | 7 +- .../xyz/nucleoid/extras/model/NEModels.java | 12 ++++ .../nucleoid_extras/items/controller.json | 6 -- .../models/item/controller.json | 6 -- 8 files changed, 88 insertions(+), 16 deletions(-) create mode 100644 src/datagen/java/xyz/nucleoid/extras/data/provider/NEModelProvider.java create mode 100644 src/main/java/xyz/nucleoid/extras/model/NEModels.java delete mode 100644 src/main/resources/assets/nucleoid_extras/items/controller.json delete mode 100644 src/main/resources/assets/nucleoid_extras/models/item/controller.json diff --git a/build.gradle b/build.gradle index 0b168cb..beeeb0a 100644 --- a/build.gradle +++ b/build.gradle @@ -41,6 +41,7 @@ dependencies { //modCompileOnly "com.viaversion:viaversion-api:4.7.0-SNAPSHOT" modCompileOnly "dev.gegy:player-roles-api:1.6.13" + modImplementation "eu.pb4:polymer-resource-pack-extras:${project.rp_extras_version}" modImplementation "eu.pb4:polymer-autohost:${project.autohost_version}" } diff --git a/gradle.properties b/gradle.properties index 4e3b7b4..d9ed804 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,4 +14,5 @@ mod_version=1.3.2 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 b3f79e3..854f316 100644 --- a/src/datagen/java/xyz/nucleoid/extras/data/NEDatagen.java +++ b/src/datagen/java/xyz/nucleoid/extras/data/NEDatagen.java @@ -5,6 +5,7 @@ import xyz.nucleoid.extras.data.provider.NEAdvancementProvider; import xyz.nucleoid.extras.data.provider.NEBlockTagProvider; import xyz.nucleoid.extras.data.provider.NEItemTagProvider; +import xyz.nucleoid.extras.data.provider.NEModelProvider; public class NEDatagen implements DataGeneratorEntrypoint { @Override @@ -15,5 +16,6 @@ public void onInitializeDataGenerator(FabricDataGenerator dataGenerator) { var blockTags = pack.addProvider(NEBlockTagProvider::new); pack.addProvider((dataOutput, registries) -> new NEItemTagProvider(dataOutput, registries, blockTags)); + pack.addProvider(NEModelProvider::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..91034f4 --- /dev/null +++ b/src/datagen/java/xyz/nucleoid/extras/data/provider/NEModelProvider.java @@ -0,0 +1,69 @@ +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 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.util.Identifier; +import net.minecraft.util.Util; +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()).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/lobby/item/GamePortalOpenerItem.java b/src/main/java/xyz/nucleoid/extras/lobby/item/GamePortalOpenerItem.java index 8fe12fd..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,5 @@ package xyz.nucleoid.extras.lobby.item; -import com.mojang.authlib.GameProfile; import eu.pb4.polymer.core.api.item.PolymerItem; import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils; import net.minecraft.entity.player.PlayerEntity; @@ -13,9 +12,9 @@ import net.minecraft.util.Hand; import net.minecraft.util.Identifier; import net.minecraft.world.World; -import xyz.nucleoid.extras.NucleoidExtras; 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; @@ -48,8 +47,8 @@ public Item getPolymerItem(ItemStack stack, PacketContext context) { @Override public Identifier getPolymerItemModel(ItemStack stack, PacketContext context) { - if(PolymerResourcePackUtils.hasMainPack(context)) { - return NucleoidExtras.identifier("controller"); + 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/items/controller.json b/src/main/resources/assets/nucleoid_extras/items/controller.json deleted file mode 100644 index 280e3a0..0000000 --- a/src/main/resources/assets/nucleoid_extras/items/controller.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "model": { - "type": "minecraft:model", - "model": "nucleoid_extras:item/controller" - } -} diff --git a/src/main/resources/assets/nucleoid_extras/models/item/controller.json b/src/main/resources/assets/nucleoid_extras/models/item/controller.json deleted file mode 100644 index 5a1d3d4..0000000 --- a/src/main/resources/assets/nucleoid_extras/models/item/controller.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "nucleoid_extras:item/controller" - } -}