Skip to content

Commit

Permalink
Hats Off! Cosmetic system for familiars restored and upgraded (#1432)
Browse files Browse the repository at this point in the history
* Restores GenericFamiliarRenderer for rendering Cosmetic Accessories on familiars. Make ICosmeticItem#getBone entity-sensitive to switch pivot based on entity for multiple support. Allow hiding wixie hat if the familiar has an hat cosmetic. Allow Starbuncle Shades on all familiars.

* Bump Ars indev deps
  • Loading branch information
Alexthw46 authored Oct 6, 2024
1 parent 8a449ec commit 16638b0
Show file tree
Hide file tree
Showing 19 changed files with 193 additions and 114 deletions.
10 changes: 5 additions & 5 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ plugins {
id 'eclipse'
id 'idea'
id 'maven-publish'
id 'net.neoforged.gradle.userdev' version '7.0.145'
id 'net.neoforged.gradle.userdev' version '7.0.+'
}

version = mod_version
Expand All @@ -24,7 +24,7 @@ java.withSourcesJar()

subsystems {
parchment {
minecraftVersion = "1.20.6"
minecraftVersion = "1.21"
mappingsVersion = project.parchment_version
}
}
Expand All @@ -43,7 +43,7 @@ runs {
}

data {
programArguments.addAll '--mod', mod_id, '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath()
getArguments().addAll '--mod', mod_id, '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath()
}
}

Expand Down Expand Up @@ -104,7 +104,7 @@ dependencies {
// jarJar(group: 'software.bernie.geckolib', name: "geckolib-neoforge-${minecraft_version}", version: "[4.5,)") {
// jarJar.pin(it, "${geckolib_version}")
// }
implementation "software.bernie.geckolib:geckolib-neoforge-1.21:${geckolib_version}"
implementation "software.bernie.geckolib:geckolib-neoforge-1.21.1:${geckolib_version}"
//
implementation(jarJar(group: 'vazkii.patchouli', name: 'Patchouli', version: '[1.21,)') {
jarJar.pin(it, patchouli_version)
Expand All @@ -117,7 +117,7 @@ dependencies {
implementation "mezz.jei:jei-1.21-neoforge:${jei_version}"
implementation 'com.github.glitchfiend:TerraBlender-neoforge:1.21-4.0.0.0'
implementation "curse.maven:jade-324717:5444008"
implementation 'top.theillusivec4.curios:curios-neoforge:9.0.4+1.21'
implementation "top.theillusivec4.curios:curios-neoforge:${curios_version}+1.21"

implementation "curse.maven:ars-additions-974408:5698511"
}
Expand Down
21 changes: 11 additions & 10 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,16 @@
org.gradle.jvmargs=-Xmx4G
org.gradle.daemon=false
org.gradle.debug=false

neogradle.subsystems.parchment.minecraftVersion=1.20.6
neogradle.subsystems.parchment.mappingsVersion=2024.05.01
neogradle.subsystems.decompiler.maxMemory=4G
neogradle.subsystems.recompiler.maxMemory=4G
neogradle.subsystems.parchment.minecraftVersion=1.21.0
neogradle.subsystems.parchment.mappingsVersion=2024.07.28

minecraft_version=1.21.0
parchment_version=2024.05.01
minecraft_version_range=[1.20.6,1.21)
neo_version=21.1.13
neo_version_range=[20.6,)
parchment_version=2024.07.28
minecraft_version_range=[1.20.6,1.21.2)
neo_version=21.1.66
neo_version_range=[21,)
loader_version_range=[2,)

mod_id=ars_nouveau
Expand All @@ -23,7 +24,7 @@ mod_authors=Bailey Hollingsworth
mod_description=Craft spells, create powerful baubles, and summon magical creatures!

jei_version=19.5.0.44
curios_version=8.0.0-beta
geckolib_version=4.5.7
patchouli_version=87-NEOFORGE-SNAPSHOT
curios_version=9.0.12
geckolib_version=4.6.6
patchouli_version=88-NEOFORGE-SNAPSHOT
caelus_version=7.0.0+1.21
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,28 @@

public interface ICosmeticItem {

Vec3 defaultScaling = new Vec3(1.0, 1.0, 1.0);

//bone model where the item is renderer, all animations that include the bone will be synced with the item
default String getBone() {
default String getBone(LivingEntity entity) {
return "head";
}

//translate relative to bone pivot
Vec3 getTranslations();
/**
* translate relative to bone pivot specified by {@link ICosmeticItem#getBone}
*/
default Vec3 getTranslations() {
return Vec3.ZERO;
}

Vec3 getScaling();
default Vec3 getScaling() {
return defaultScaling;
}

//Entity Sensitive
//translate relative to bone pivot
/**
* Entity Sensitive
* translate relative to bone pivot specified by {@link ICosmeticItem#getBone}
*/
default Vec3 getTranslations(LivingEntity entity) {
return getTranslations();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,15 @@
import com.hollingsworth.arsnouveau.client.gui.GuiSpellHUD;
import com.hollingsworth.arsnouveau.client.particle.ParticleColor;
import com.hollingsworth.arsnouveau.client.renderer.entity.*;
import com.hollingsworth.arsnouveau.client.renderer.entity.familiar.AnimSkullRenderer;
import com.hollingsworth.arsnouveau.client.renderer.entity.familiar.FamiliarBookwyrmRenderer;
import com.hollingsworth.arsnouveau.client.renderer.entity.familiar.FamiliarStarbyModel;
import com.hollingsworth.arsnouveau.client.renderer.entity.familiar.FamiliarWhirlisprigRenderer;
import com.hollingsworth.arsnouveau.client.renderer.entity.familiar.*;
import com.hollingsworth.arsnouveau.client.renderer.tile.*;
import com.hollingsworth.arsnouveau.common.block.tile.MageBlockTile;
import com.hollingsworth.arsnouveau.common.block.tile.PotionJarTile;
import com.hollingsworth.arsnouveau.common.block.tile.PotionMelderTile;
import com.hollingsworth.arsnouveau.common.entity.EntityDrygmy;
import com.hollingsworth.arsnouveau.common.entity.EntityWixie;
import com.hollingsworth.arsnouveau.common.entity.Whirlisprig;
import com.hollingsworth.arsnouveau.common.entity.familiar.FamiliarDrygmy;
import com.hollingsworth.arsnouveau.common.entity.familiar.FamiliarStarbuncle;
import com.hollingsworth.arsnouveau.common.entity.familiar.FamiliarWixie;
import com.hollingsworth.arsnouveau.common.items.data.ArmorPerkHolder;
import com.hollingsworth.arsnouveau.common.items.data.BlockFillContents;
import com.hollingsworth.arsnouveau.common.items.data.PotionJarData;
Expand All @@ -37,6 +32,8 @@
import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.LayeredDraw;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.*;
import net.minecraft.client.renderer.item.ClampedItemPropertyFunction;
import net.minecraft.client.renderer.item.ItemProperties;
Expand Down Expand Up @@ -122,13 +119,13 @@ public static void registerRenderers(final EntityRenderersEvent.RegisterRenderer
event.registerEntityRenderer(ModEntities.ALLY_VEX.get(), VexRenderer::new);

event.registerEntityRenderer(ModEntities.STARBUNCLE_TYPE.get(), StarbuncleRenderer::new);
event.registerEntityRenderer(ModEntities.WHIRLISPRIG_TYPE.get(), (t) -> new GeoEntityRenderer<>(t, new WhirlisprigModel<>()){
event.registerEntityRenderer(ModEntities.WHIRLISPRIG_TYPE.get(), (t) -> new GeoEntityRenderer<>(t, new WhirlisprigModel<>()) {
@Override
public @NotNull ResourceLocation getTextureLocation(@NotNull Whirlisprig animatable) {
return animatable.getTexture();
}
});
event.registerEntityRenderer(ModEntities.ENTITY_WIXIE_TYPE.get(), (t) -> new GeoEntityRenderer<>(t, new WixieModel<>()){
event.registerEntityRenderer(ModEntities.ENTITY_WIXIE_TYPE.get(), (t) -> new GeoEntityRenderer<>(t, new WixieModel<>()) {
@Override
public @NotNull ResourceLocation getTextureLocation(@NotNull EntityWixie animatable) {
return animatable.getTexture();
Expand All @@ -146,14 +143,14 @@ public static void registerRenderers(final EntityRenderersEvent.RegisterRenderer
event.registerEntityRenderer(ModEntities.ENTITY_RITUAL.get(),
renderManager -> new RenderBlank(renderManager, ArsNouveau.prefix("textures/entity/spell_proj.png")));
event.registerEntityRenderer(ModEntities.ENTITY_SPELL_ARROW.get(), TippableArrowRenderer::new);
event.registerEntityRenderer(ModEntities.ENTITY_WIXIE_TYPE.get(), (t) -> new GeoEntityRenderer<>(t, new WixieModel<>()){
event.registerEntityRenderer(ModEntities.ENTITY_WIXIE_TYPE.get(), (t) -> new GeoEntityRenderer<>(t, new WixieModel<>()) {
@Override
public @NotNull ResourceLocation getTextureLocation(@NotNull EntityWixie animatable) {
return animatable.getTexture();
}
});
event.registerEntityRenderer(ModEntities.ENTITY_DUMMY.get(), DummyRenderer::new);
event.registerEntityRenderer(ModEntities.ENTITY_DRYGMY.get(), (t) -> new GeoEntityRenderer<>(t, new DrygmyModel<>()){
event.registerEntityRenderer(ModEntities.ENTITY_DRYGMY.get(), (t) -> new GeoEntityRenderer<>(t, new DrygmyModel<>()) {
@Override
public @NotNull ResourceLocation getTextureLocation(@NotNull EntityDrygmy animatable) {
return animatable.getTexture();
Expand All @@ -162,48 +159,38 @@ public static void registerRenderers(final EntityRenderersEvent.RegisterRenderer
event.registerEntityRenderer(ModEntities.ORBIT_SPELL.get(), renderManager -> new RenderBlank(renderManager, ArsNouveau.prefix("textures/entity/spell_proj.png")));
event.registerEntityRenderer(ModEntities.WILDEN_BOSS.get(), rendermanager -> new GeoEntityRenderer<>(rendermanager, new WildenChimeraModel()));
event.registerEntityRenderer(ModEntities.ENTITY_CHIMERA_SPIKE.get(), ChimeraProjectileRenderer::new);
event.registerEntityRenderer(ModEntities.ENTITY_FAMILIAR_STARBUNCLE.get(), (t) -> new GeoEntityRenderer<>(t, new FamiliarStarbyModel<>()){
event.registerEntityRenderer(ModEntities.ENTITY_FAMILIAR_STARBUNCLE.get(), (t) -> new GenericFamiliarRenderer<>(t, new FamiliarStarbyModel<>()) {
@Override
public @NotNull ResourceLocation getTextureLocation(@NotNull FamiliarStarbuncle animatable) {
return animatable.getTexture();
}
});
event.registerEntityRenderer(ModEntities.ENTITY_FAMILIAR_DRYGMY.get(), (t) -> new GeoEntityRenderer<>(t, new DrygmyModel<>()){
@Override
public @NotNull ResourceLocation getTextureLocation(@NotNull FamiliarDrygmy animatable) {
return animatable.getTexture();
public @Nullable RenderType getRenderType(FamiliarStarbuncle animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) {
return StarbuncleRenderer.specialShaders.getOrDefault(animatable.getName().getString(), RenderType::entityCutoutNoCull).apply(texture);
}
});
event.registerEntityRenderer(ModEntities.ENTITY_FAMILIAR_DRYGMY.get(), (t) -> new GenericFamiliarRenderer<>(t, new DrygmyModel<>()));
event.registerEntityRenderer(ModEntities.ENTITY_FAMILIAR_SYLPH.get(), FamiliarWhirlisprigRenderer::new);
event.registerEntityRenderer(ModEntities.ENTITY_FAMILIAR_WIXIE.get(), (t) -> new GeoEntityRenderer<>(t, new WixieModel<>()){
@Override
public ResourceLocation getTextureLocation(FamiliarWixie animatable) {
return animatable.getTexture();
}
});
event.registerEntityRenderer(ModEntities.ENTITY_FAMILIAR_WIXIE.get(), (t) -> new GenericFamiliarRenderer<>(t, new WixieModel<>()));
event.registerEntityRenderer(ModEntities.ENTITY_BOOKWYRM_TYPE.get(), BookwyrmRenderer::new);
event.registerEntityRenderer(ModEntities.FAMILIAR_AMETHYST_GOLEM.get(), AmethystGolemRenderer::new);
event.registerEntityRenderer(ModEntities.ENTITY_FAMILIAR_BOOKWYRM.get(), FamiliarBookwyrmRenderer::new);
event.registerEntityRenderer(ModEntities.LINGER_SPELL.get(),
renderManager -> new RenderBlank(renderManager, ArsNouveau.prefix("textures/entity/spell_proj.png")));
event.registerEntityRenderer(ModEntities.ENTITY_CASCADING_WEALD.get(), (v) -> new GeoEntityRenderer<>(v, new WealdWalkerModel<>("cascading_weald")));
event.registerEntityRenderer(ModEntities.ENTITY_BLAZING_WEALD.get(), (v) -> new GeoEntityRenderer<>(v, new WealdWalkerModel<>("blazing_weald")));
event.registerEntityRenderer(ModEntities.ENTITY_FLOURISHING_WEALD.get(), (v) -> new GeoEntityRenderer<>(v, new WealdWalkerModel<>("flourishing_weald")));
event.registerEntityRenderer(ModEntities.ENTITY_VEXING_WEALD.get(), (v) -> new GeoEntityRenderer<>(v, new WealdWalkerModel<>("vexing_weald")));
event.registerEntityRenderer(ModEntities.ENTITY_BLAZING_WEALD.get(), (v) -> new GeoEntityRenderer<>(v, new WealdWalkerModel<>("blazing_weald")));
event.registerEntityRenderer(ModEntities.ENTITY_FLOURISHING_WEALD.get(), (v) -> new GeoEntityRenderer<>(v, new WealdWalkerModel<>("flourishing_weald")));
event.registerEntityRenderer(ModEntities.ENTITY_VEXING_WEALD.get(), (v) -> new GeoEntityRenderer<>(v, new WealdWalkerModel<>("vexing_weald")));

event.registerEntityRenderer(ModEntities.AMETHYST_GOLEM.get(), AmethystGolemRenderer::new);
event.registerEntityRenderer(ModEntities.SCRYER_CAMERA.get(), renderManager -> new RenderBlank(renderManager, ArsNouveau.prefix("textures/entity/spell_proj.png")));
event.registerEntityRenderer(ModEntities.ENCHANTED_FALLING_BLOCK.get(), EnchantedFallingBlockRenderer::new);
event.registerEntityRenderer(ModEntities.ICE_SHARD.get(), EnchantedFallingBlockRenderer::new);
event.registerEntityRenderer(ModEntities.ENCHANTED_MAGE_BLOCK.get(), MageBlockRenderer::new);
event.registerEntityRenderer(ModEntities.ENCHANTED_HEAD_BLOCK.get(), EnchantedSkullRenderer::new);
event.registerEntityRenderer(ModEntities.GIFT_STARBY.get(),(renderer) -> new GeoEntityRenderer<>(renderer, new GiftStarbyModel()));
event.registerEntityRenderer(ModEntities.GIFT_STARBY.get(), (renderer) -> new GeoEntityRenderer<>(renderer, new GiftStarbyModel()));
event.registerEntityRenderer(ModEntities.ANIMATED_BLOCK.get(), AnimBlockRenderer::new);
event.registerEntityRenderer(ModEntities.ANIMATED_HEAD.get(), AnimSkullRenderer::new);
event.registerEntityRenderer(ModEntities.CINDER.get(), CinderRenderer::new);
event.registerEntityRenderer(ModEntities.WALL_SPELL.get(),
renderManager -> new RenderBlank(renderManager, ArsNouveau.prefix("textures/entity/spell_proj.png")));
event.registerEntityRenderer(ModEntities.LILY.get(), (v) -> new GeoEntityRenderer<>(v, new LilyModel()));
event.registerEntityRenderer(ModEntities.LILY.get(), (v) -> new GeoEntityRenderer<>(v, new LilyModel()));
}

public static LayeredDraw.Layer cameraOverlay = (gui, tracker) -> {
Expand Down Expand Up @@ -249,7 +236,7 @@ public static void init(final FMLClientSetupEvent evt) {
});
ItemProperties.register(ItemsRegistry.DOWSING_ROD.get(), ArsNouveau.prefix("uses"), new ClampedItemPropertyFunction() {
@Override
public float unclampedCall(ItemStack pStack, @Nullable ClientLevel pLevel, @Nullable LivingEntity pEntity, int pSeed) {
public float unclampedCall(@NotNull ItemStack pStack, @Nullable ClientLevel pLevel, @Nullable LivingEntity pEntity, int pSeed) {
return switch (pStack.getDamageValue()) {
case 1 -> 0.75f;
case 2 -> 0.50f;
Expand Down Expand Up @@ -379,7 +366,7 @@ public static int colorFromArmor(ItemStack stack) {
public static int colorFromFlask(ItemStack stack) {
PotionContents contents = PotionUtil.getContents(stack);
var provider = PotionProviderRegistry.from(stack);
if(provider != null){
if (provider != null) {
return provider.usesRemaining(stack) <= 0 ? 0 : provider.getPotionData(stack).getColor();
}
return contents == PotionContents.EMPTY ? -1 : contents.getColor();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,14 @@
public class StarbuncleModel extends GeoModel<Starbuncle> {

@Override
public void setCustomAnimations(Starbuncle entity, long uniqueID, @Nullable AnimationState customPredicate) {
public void setCustomAnimations(Starbuncle entity, long uniqueID, @Nullable AnimationState<Starbuncle> customPredicate) {
super.setCustomAnimations(entity, uniqueID, customPredicate);
if (entity.partyCarby)
return;
if (customPredicate == null)
return;
this.getBone("basket").get().setHidden(!entity.isTamed());
if (this.getBone("basket").isPresent())
this.getBone("basket").get().setHidden(!entity.isTamed());

GeoBone head = this.getAnimationProcessor().getBone("head");
EntityModelData extraData = (EntityModelData) customPredicate.getExtraData().get(DataTickets.ENTITY_MODEL_DATA);
Expand All @@ -35,11 +36,11 @@ public ResourceLocation getModelResource(Starbuncle carbuncle) {

@Override
public ResourceLocation getTextureResource(Starbuncle carbuncle) {
return carbuncle.getTexture(carbuncle);
return carbuncle.getTexture();
}

@Override
public ResourceLocation getAnimationResource(Starbuncle carbuncle) {
return ArsNouveau.prefix( "animations/starbuncle_animations.json");
return ArsNouveau.prefix("animations/starbuncle_animations.json");
}
}
Loading

0 comments on commit 16638b0

Please sign in to comment.