From 25f886989f05a7a9d6aeb65812a88968002ee244 Mon Sep 17 00:00:00 2001 From: Sarah Evermore Date: Tue, 2 Jul 2024 10:36:17 +0200 Subject: [PATCH] initial trans flag heart particle impl :3 --- .../net/solaara/beeyourself/BeeYourself.java | 6 ++ .../beeyourself/BeeYourselfClient.java | 8 +++ .../beeyourself/transbee/TransBeeEntity.java | 5 +- .../TransFlagHeartParticle.java | 66 ++++++++++++++++++ .../particles/trans_flag_heart.json | 7 ++ .../textures/particle/trans_flag_heart_1.png | Bin 0 -> 2270 bytes .../textures/particle/trans_flag_heart_2.png | Bin 0 -> 2186 bytes .../textures/particle/trans_flag_heart_3.png | Bin 0 -> 2242 bytes .../textures/particle/trans_heart_atlas.png | Bin 0 -> 3065 bytes 9 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 src/main/java/net/solaara/beeyourself/transflagheart/TransFlagHeartParticle.java create mode 100644 src/main/resources/assets/bee-yourself/particles/trans_flag_heart.json create mode 100644 src/main/resources/assets/bee-yourself/textures/particle/trans_flag_heart_1.png create mode 100644 src/main/resources/assets/bee-yourself/textures/particle/trans_flag_heart_2.png create mode 100644 src/main/resources/assets/bee-yourself/textures/particle/trans_flag_heart_3.png create mode 100644 src/main/resources/assets/bee-yourself/textures/particle/trans_heart_atlas.png diff --git a/src/main/java/net/solaara/beeyourself/BeeYourself.java b/src/main/java/net/solaara/beeyourself/BeeYourself.java index b5d707b..a1b17c7 100644 --- a/src/main/java/net/solaara/beeyourself/BeeYourself.java +++ b/src/main/java/net/solaara/beeyourself/BeeYourself.java @@ -4,11 +4,13 @@ import net.fabricmc.fabric.api.item.v1.FabricItemSettings; import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder; +import net.fabricmc.fabric.api.particle.v1.FabricParticleTypes; import net.minecraft.entity.EntityDimensions; import net.minecraft.entity.EntityType; import net.minecraft.entity.SpawnGroup; import net.minecraft.item.ItemGroup; import net.minecraft.item.SpawnEggItem; +import net.minecraft.particle.DefaultParticleType; import net.minecraft.item.Item; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; @@ -23,6 +25,8 @@ public class BeeYourself implements ModInitializer { // That way, it's clear which mod wrote info, warnings, and errors. public static final Logger LOGGER = LoggerFactory.getLogger("bee-yourself"); + public static final DefaultParticleType TRANS_FLAG_HEART_PARTICLE = FabricParticleTypes.simple(); + public static final EntityType TRANS_BEE = Registry.register( Registry.ENTITY_TYPE, new Identifier("beeyourself", "transbee"), @@ -41,6 +45,8 @@ public void onInitialize() { FabricDefaultAttributeRegistry.register(TRANS_BEE, TransBeeEntity.create_transbee_attributes()); Registry.register(Registry.ITEM, new Identifier("bee-yourself", "trans_bee_spawn_egg"), TRANS_BEE_SPAWN_EGG); + Registry.register(Registry.PARTICLE_TYPE, new Identifier("bee-yourself", "trans_flag_heart"), + TRANS_FLAG_HEART_PARTICLE); LOGGER.info("BeeYourself onInitialize()"); } diff --git a/src/main/java/net/solaara/beeyourself/BeeYourselfClient.java b/src/main/java/net/solaara/beeyourself/BeeYourselfClient.java index cecd6b1..00d7c17 100644 --- a/src/main/java/net/solaara/beeyourself/BeeYourselfClient.java +++ b/src/main/java/net/solaara/beeyourself/BeeYourselfClient.java @@ -4,10 +4,15 @@ import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry; +import net.fabricmc.fabric.api.event.client.ClientSpriteRegistryCallback; +import net.minecraft.client.particle.EmotionParticle.HeartFactory; import net.minecraft.client.render.entity.model.EntityModelLayer; +import net.minecraft.screen.PlayerScreenHandler; import net.minecraft.util.Identifier; import net.solaara.beeyourself.transbee.TransBeeEntityModel; import net.solaara.beeyourself.transbee.TransBeeEntityRenderer; +import net.solaara.beeyourself.transflagheart.TransFlagHeartParticle; @Environment(EnvType.CLIENT) public class BeeYourselfClient implements ClientModInitializer { @@ -21,6 +26,9 @@ public void onInitializeClient() { return new TransBeeEntityRenderer(context); }); + ParticleFactoryRegistry.getInstance().register(BeeYourself.TRANS_FLAG_HEART_PARTICLE, + TransFlagHeartParticle.Factory::new); + EntityModelLayerRegistry.register(MODEL_TRANSBEE_LAYER, TransBeeEntityModel::getTexturedModelData); } diff --git a/src/main/java/net/solaara/beeyourself/transbee/TransBeeEntity.java b/src/main/java/net/solaara/beeyourself/transbee/TransBeeEntity.java index 0dc816e..62cc474 100644 --- a/src/main/java/net/solaara/beeyourself/transbee/TransBeeEntity.java +++ b/src/main/java/net/solaara/beeyourself/transbee/TransBeeEntity.java @@ -76,9 +76,10 @@ public ActionResult interactMob(PlayerEntity player, Hand hand) { double d = this.random.nextGaussian() * 0.2; double e = this.random.nextGaussian() * 0.2; double f = this.random.nextGaussian() * 0.2; - ModUtils.spawnForcedParticles((ServerWorld) world, ParticleTypes.HEART, this.getParticleX(1.0), + ModUtils.spawnForcedParticles((ServerWorld) world, BeeYourself.TRANS_FLAG_HEART_PARTICLE, + this.getParticleX(1.0), this.getRandomBodyY() + 0.5, - this.getParticleZ(1.0), 7, d, e, + this.getParticleZ(1.0), 17, d, e, f, 1); this.setTarget(player); diff --git a/src/main/java/net/solaara/beeyourself/transflagheart/TransFlagHeartParticle.java b/src/main/java/net/solaara/beeyourself/transflagheart/TransFlagHeartParticle.java new file mode 100644 index 0000000..3539f6f --- /dev/null +++ b/src/main/java/net/solaara/beeyourself/transflagheart/TransFlagHeartParticle.java @@ -0,0 +1,66 @@ +package net.solaara.beeyourself.transflagheart; + +import net.fabricmc.api.Environment; +import net.fabricmc.api.EnvType; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.particle.ParticleFactory; +import net.minecraft.client.particle.ParticleTextureSheet; +import net.minecraft.client.particle.SpriteBillboardParticle; +import net.minecraft.client.particle.SpriteProvider; +import net.minecraft.client.render.Tessellator; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.particle.DefaultParticleType; +import net.solaara.beeyourself.BeeYourself; + +@Environment(EnvType.CLIENT) +public class TransFlagHeartParticle extends SpriteBillboardParticle { + // The sprite provider which is used to determine the particle's texture + private final SpriteProvider spriteProvider; + private final int variant; + + TransFlagHeartParticle(ClientWorld world, double x, double y, double z, double velX, double velY, double velZ, + SpriteProvider spriteProvider) { + super(world, x, y, z); + this.spriteProvider = spriteProvider; // Sets the sprite provider from above to the sprite provider in the + // constructor parameters + this.x = x; // The x from the constructor parameters + this.y = y; + this.z = z; + this.alpha = 1.0f; // Setting the alpha to 1.0f means there will be no opacity change until the + // alpha value is changed + this.velocityMultiplier = 0.86F; + this.velocityX *= 0.01F; + this.velocityY *= 0.01F; + this.velocityZ *= 0.01F; + this.velocityY += 0.1; + this.scale *= 1.5F; + this.maxAge = 16; + this.collidesWithWorld = false; + this.setSpriteForAge(spriteProvider); // Required + this.variant = world.random.nextInt(1, 4); + var test = this.spriteProvider.getSprite(this.variant, this.variant); + + BeeYourself.LOGGER.info("variant " + this.variant); + BeeYourself.LOGGER.info("variant " + test); + } + + @Override + public ParticleTextureSheet getType() { + return ParticleTextureSheet.PARTICLE_SHEET_TRANSLUCENT; + } + + @Environment(EnvType.CLIENT) + public static class Factory implements ParticleFactory { + // The factory used in a particle's registry + private final SpriteProvider spriteProvider; + + public Factory(SpriteProvider spriteProvider) { + this.spriteProvider = spriteProvider; + } + + public Particle createParticle(DefaultParticleType defaultParticleType, ClientWorld clientWorld, double x, + double y, double z, double velX, double velY, double velZ) { + return new TransFlagHeartParticle(clientWorld, x, y, z, velX, velY, velZ, this.spriteProvider); + } + } +} diff --git a/src/main/resources/assets/bee-yourself/particles/trans_flag_heart.json b/src/main/resources/assets/bee-yourself/particles/trans_flag_heart.json new file mode 100644 index 0000000..ad56925 --- /dev/null +++ b/src/main/resources/assets/bee-yourself/particles/trans_flag_heart.json @@ -0,0 +1,7 @@ +{ + "textures": [ + "bee-yourself:trans_flag_heart_1", + "bee-yourself:trans_flag_heart_2", + "bee-yourself:trans_flag_heart_3" + ] +} diff --git a/src/main/resources/assets/bee-yourself/textures/particle/trans_flag_heart_1.png b/src/main/resources/assets/bee-yourself/textures/particle/trans_flag_heart_1.png new file mode 100644 index 0000000000000000000000000000000000000000..465629492d3752e218eeb55680faa6c35fb2a2b1 GIT binary patch literal 2270 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/bee-yourself/textures/particle/trans_flag_heart_3.png b/src/main/resources/assets/bee-yourself/textures/particle/trans_flag_heart_3.png new file mode 100644 index 0000000000000000000000000000000000000000..3a73021d6e3e4c28848deb1247484a2337b7c879 GIT binary patch literal 2242 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 UT(rM6U-ggO$J3u$yfR|PU(U_ATmS$7 literal 0 HcmV?d00001