mirror of
https://github.com/FabricMC/fabric.git
synced 2025-04-11 22:45:38 -04:00
parent
ddcd25cd9e
commit
73145abb31
3 changed files with 82 additions and 0 deletions
fabric-rendering-v1/src
client/java/net/fabricmc/fabric/mixin/client/rendering
testmod
java/net/fabricmc/fabric/test/rendering
resources/assets/fabric-rendering-v1-testmod/textures/models/armor
|
@ -16,10 +16,16 @@
|
|||
|
||||
package net.fabricmc.fabric.mixin.client.rendering;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
import net.minecraft.client.render.VertexConsumerProvider;
|
||||
import net.minecraft.client.render.entity.feature.ArmorFeatureRenderer;
|
||||
|
@ -29,13 +35,19 @@ import net.minecraft.client.render.entity.model.BipedEntityModel;
|
|||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.entity.EquipmentSlot;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.item.ArmorItem;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import net.fabricmc.fabric.api.client.rendering.v1.ArmorRenderer;
|
||||
import net.fabricmc.fabric.impl.client.rendering.ArmorRendererRegistryImpl;
|
||||
|
||||
@Mixin(ArmorFeatureRenderer.class)
|
||||
public abstract class ArmorFeatureRendererMixin extends FeatureRenderer<LivingEntity, BipedEntityModel<LivingEntity>> {
|
||||
@Shadow
|
||||
@Final
|
||||
private static Map<String, Identifier> ARMOR_TEXTURE_CACHE;
|
||||
|
||||
private ArmorFeatureRendererMixin(FeatureRendererContext<LivingEntity, BipedEntityModel<LivingEntity>> context) {
|
||||
super(context);
|
||||
}
|
||||
|
@ -50,4 +62,18 @@ public abstract class ArmorFeatureRendererMixin extends FeatureRenderer<LivingEn
|
|||
ci.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "getArmorTexture", at = @At(value = "HEAD"), cancellable = true)
|
||||
private void getArmorTexture(ArmorItem item, boolean secondLayer, String overlay, CallbackInfoReturnable<Identifier> cir) {
|
||||
final String name = item.getMaterial().getName();
|
||||
final int separator = name.indexOf(Identifier.NAMESPACE_SEPARATOR);
|
||||
|
||||
if (separator != -1) {
|
||||
final String namespace = name.substring(0, separator);
|
||||
final String path = name.substring(separator + 1);
|
||||
final String texture = String.format(Locale.ROOT, "%s:textures/models/armor/%s_layer_%d%s.png", namespace, path, secondLayer ? 2 : 1, overlay == null ? "" : "_" + overlay);
|
||||
|
||||
cir.setReturnValue(ARMOR_TEXTURE_CACHE.computeIfAbsent(texture, Identifier::new));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,9 +19,16 @@ package net.fabricmc.fabric.test.rendering;
|
|||
import java.util.Optional;
|
||||
|
||||
import net.minecraft.client.item.TooltipData;
|
||||
import net.minecraft.entity.EquipmentSlot;
|
||||
import net.minecraft.item.ArmorItem;
|
||||
import net.minecraft.item.ArmorMaterial;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemGroup;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.Items;
|
||||
import net.minecraft.recipe.Ingredient;
|
||||
import net.minecraft.sound.SoundEvent;
|
||||
import net.minecraft.sound.SoundEvents;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.registry.Registry;
|
||||
|
||||
|
@ -29,10 +36,12 @@ import net.fabricmc.api.ModInitializer;
|
|||
|
||||
public class TooltipComponentTestInit implements ModInitializer {
|
||||
public static Item CUSTOM_TOOLTIP_ITEM = new CustomTooltipItem();
|
||||
public static Item CUSTOM_ARMOR_ITEM = new ArmorItem(TestArmorMaterial.INSTANCE, EquipmentSlot.CHEST, new Item.Settings().group(ItemGroup.MISC));
|
||||
|
||||
@Override
|
||||
public void onInitialize() {
|
||||
Registry.register(Registry.ITEM, new Identifier("fabric-rendering-v1-testmod", "custom_tooltip"), CUSTOM_TOOLTIP_ITEM);
|
||||
Registry.register(Registry.ITEM, new Identifier("fabric-rendering-v1-testmod", "test_chest"), CUSTOM_ARMOR_ITEM);
|
||||
}
|
||||
|
||||
private static class CustomTooltipItem extends Item {
|
||||
|
@ -47,4 +56,51 @@ public class TooltipComponentTestInit implements ModInitializer {
|
|||
}
|
||||
|
||||
public record Data(String string) implements TooltipData { }
|
||||
|
||||
public static final class TestArmorMaterial implements ArmorMaterial {
|
||||
public static final TestArmorMaterial INSTANCE = new TestArmorMaterial();
|
||||
|
||||
private TestArmorMaterial() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDurability(EquipmentSlot slot) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getProtectionAmount(EquipmentSlot slot) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnchantability() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SoundEvent getEquipSound() {
|
||||
return SoundEvents.ITEM_ARMOR_EQUIP_LEATHER;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ingredient getRepairIngredient() {
|
||||
return Ingredient.ofItems(Items.LEATHER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "fabric-rendering-v1-testmod:test";
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getToughness() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getKnockbackResistance() {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Binary file not shown.
After ![]() (image error) Size: 211 B |
Loading…
Add table
Reference in a new issue