fix: Pride Elytra not deploying & rendering cape

Fixes #62
Fixes #63
This commit is contained in:
Ampflower 🌺 2025-03-13 14:06:37 -07:00
parent ba79ca8ee0
commit 457e69735f
No known key found for this signature in database
GPG Key ID: FC0397C90D508D7F
9 changed files with 148 additions and 6 deletions

View File

@ -0,0 +1,28 @@
package gay.pridecraft.joy.mixin.client.minecraft;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import gay.pridecraft.joy.tags.JoyItemTags;
import net.minecraft.client.render.entity.feature.CapeFeatureRenderer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
/**
* @author Ampflower
* @since 1.0.0
**/
@Mixin(CapeFeatureRenderer.class)
public class MixinCapeFeatureRenderer {
@WrapOperation(
method = "render",
at = @At(value = "INVOKE",
target = "Lnet/minecraft/item/ItemStack;isOf(Lnet/minecraft/item/Item;)Z"))
private static boolean isElytra(ItemStack self, Item ref, Operation<Boolean> operation) {
if (self.isIn(JoyItemTags.ELYTRA)) {
return true;
}
return operation.call(self, ref);
}
}

View File

@ -5,10 +5,8 @@
"refmap": "client-joy.refmap.json",
"compatibilityLevel": "JAVA_21",
"client": [
"BipedEntityModelMixin",
"ClientPlayNetworkHandlerMixin",
"PlayerEntityRendererMixin",
"SplashTextResourceSupplierMixin"
"BipedEntityModelMixin", "ClientPlayNetworkHandlerMixin", "PlayerEntityRendererMixin",
"SplashTextResourceSupplierMixin", "minecraft.MixinCapeFeatureRenderer"
],
"injectors": {
"defaultRequire": 1

View File

@ -23,6 +23,7 @@ public class JoyData implements DataGeneratorEntrypoint {
pack.addProvider(JoyBlockLootProvider::new);
pack.addProvider(JoyBlockTagProvider::new);
pack.addProvider(JoyEntityTagProvider::new);
pack.addProvider(JoyItemTagProvider::new);
pack.addProvider(JoyModelProvider::new);
for (final var translation : Bootstrap.getMissingTranslations()) {

View File

@ -0,0 +1,31 @@
package gay.pridecraft.joy.data;
import gay.pridecraft.joy.registry.JoyItems;
import gay.pridecraft.joy.tags.JoyItemTags;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
import net.minecraft.item.Items;
import net.minecraft.registry.RegistryWrapper;
import java.util.concurrent.CompletableFuture;
/**
* @author Ampflower
* @since 1.0.0
**/
public class JoyItemTagProvider extends FabricTagProvider.ItemTagProvider {
public JoyItemTagProvider(final FabricDataOutput output, final CompletableFuture<RegistryWrapper.WrapperLookup> completableFuture) {
super(output, completableFuture);
}
@Override
protected void configure(final RegistryWrapper.WrapperLookup wrapperLookup) {
getOrCreateTagBuilder(JoyItemTags.ELYTRA).add(
Items.ELYTRA,
JoyItems.PRIDE_ELYTRA
);
getOrCreateTagBuilder(JoyItemTags.GLIDERS).addTag(
JoyItemTags.ELYTRA
);
}
}

View File

@ -0,0 +1,28 @@
package gay.pridecraft.joy.mixin.minecraft;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import gay.pridecraft.joy.tags.JoyItemTags;
import net.minecraft.entity.LivingEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
/**
* @author Ampflower
* @since 1.0.0
**/
@Mixin(LivingEntity.class)
public class MixinLivingEntity {
@WrapOperation(
method = "tickFallFlying",
at = @At(value = "INVOKE",
target = "Lnet/minecraft/item/ItemStack;isOf(Lnet/minecraft/item/Item;)Z"))
private static boolean isElytra(ItemStack self, Item ref, Operation<Boolean> operation) {
if (self.isIn(JoyItemTags.GLIDERS)) {
return true;
}
return operation.call(self, ref);
}
}

View File

@ -0,0 +1,28 @@
package gay.pridecraft.joy.mixin.minecraft;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import gay.pridecraft.joy.tags.JoyItemTags;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
/**
* @author Ampflower
* @since 1.0.0
**/
@Mixin(PlayerEntity.class)
public class MixinPlayerEntity {
@WrapOperation(
method = "checkFallFlying",
at = @At(value = "INVOKE",
target = "Lnet/minecraft/item/ItemStack;isOf(Lnet/minecraft/item/Item;)Z"))
private static boolean isElytra(ItemStack self, Item ref, Operation<Boolean> operation) {
if (self.isIn(JoyItemTags.GLIDERS)) {
return true;
}
return operation.call(self, ref);
}
}

View File

@ -0,0 +1,25 @@
package gay.pridecraft.joy.tags;
import gay.pridecraft.joy.JoyUtil;
import net.minecraft.item.Item;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.tag.TagKey;
import net.minecraft.util.Identifier;
/**
* @author Ampflower
* @since 1.0.0
**/
public final class JoyItemTags {
public static final TagKey<Item>
GLIDERS = common("gliders"),
ELYTRA = common("elytra");
private static TagKey<Item> joy(String name) {
return TagKey.of(RegistryKeys.ITEM, JoyUtil.id(name));
}
private static TagKey<Item> common(String name) {
return TagKey.of(RegistryKeys.ITEM, Identifier.of("c", name));
}
}

View File

@ -187,5 +187,8 @@
"tooltip.joy.owner.rename": "%s of %s",
"tag.item.joy.plushies": "Plushies",
"tag.item.joy.sharks": "Shark Plushies"
"tag.item.joy.sharks": "Shark Plushies",
"tag.item.c.gliders": "Gliders",
"tag.item.c.elytra": "Elytra"
}

View File

@ -6,7 +6,7 @@
"compatibilityLevel": "JAVA_21",
"mixins": [
"AllayEntityMixin", "LivingEntityMixin", "PaintingVariantsMixin",
"minecraft.AccessorPoi"
"minecraft.AccessorPoi", "minecraft.MixinLivingEntity", "minecraft.MixinPlayerEntity"
],
"injectors": {
"defaultRequire": 1