From 5d96b9d2bda28cb10345868495390a5757385aee Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Mon, 30 May 2016 19:48:28 -0700 Subject: [PATCH] Add Elytra render for Elytra Upgrade Temporarily stole a texture for it from https://www.reddit.com/user/lemoncake__ (http://imgur.com/a/sI5cv) until @Yulife can make a real one. --- .../client/render/LayerBloodElytra.java | 53 ++++++++++++++++++ .../item/armour/ItemLivingArmour.java | 9 +++ .../bloodmagic/proxy/ClientProxy.java | 28 +++++++-- .../textures/entities/bloodElytra.png | Bin 0 -> 3373 bytes 4 files changed, 86 insertions(+), 4 deletions(-) create mode 100644 src/main/java/WayofTime/bloodmagic/client/render/LayerBloodElytra.java create mode 100644 src/main/resources/assets/bloodmagic/textures/entities/bloodElytra.png diff --git a/src/main/java/WayofTime/bloodmagic/client/render/LayerBloodElytra.java b/src/main/java/WayofTime/bloodmagic/client/render/LayerBloodElytra.java new file mode 100644 index 00000000..54dffb91 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/client/render/LayerBloodElytra.java @@ -0,0 +1,53 @@ +package WayofTime.bloodmagic.client.render; + +import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.item.armour.ItemLivingArmour; +import WayofTime.bloodmagic.livingArmour.LivingArmour; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.model.ModelElytra; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.renderer.entity.layers.LayerArmorBase; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +public class LayerBloodElytra implements LayerRenderer { + + private static final ResourceLocation TEXTURE_BLOOD_ELYTRA = new ResourceLocation("bloodmagic", "textures/entities/bloodElytra.png"); + private final RenderPlayer renderPlayer; + private final ModelElytra modelElytra = new ModelElytra(); + + public LayerBloodElytra(RenderPlayer renderPlayer) { + this.renderPlayer = renderPlayer; + } + + @Override + public void doRenderLayer(AbstractClientPlayer clientPlayer, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) { + if (LivingArmour.hasFullSet(clientPlayer)) { + ItemStack chestStack = clientPlayer.getItemStackFromSlot(EntityEquipmentSlot.CHEST); + if (ItemLivingArmour.hasUpgrade(Constants.Mod.MODID + ".upgrade.elytra", chestStack)) { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.enableBlend(); + + renderPlayer.bindTexture(TEXTURE_BLOOD_ELYTRA); + + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0F, 0.0F, 0.125F); + modelElytra.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, clientPlayer); + modelElytra.render(clientPlayer, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + + if (chestStack.isItemEnchanted()) + LayerArmorBase.renderEnchantedGlint(this.renderPlayer, clientPlayer, this.modelElytra, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale); + + GlStateManager.popMatrix(); + } + } + } + + @Override + public boolean shouldCombineTextures() { + return false; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/armour/ItemLivingArmour.java b/src/main/java/WayofTime/bloodmagic/item/armour/ItemLivingArmour.java index 1ffaffed..d61b9b4d 100644 --- a/src/main/java/WayofTime/bloodmagic/item/armour/ItemLivingArmour.java +++ b/src/main/java/WayofTime/bloodmagic/item/armour/ItemLivingArmour.java @@ -477,6 +477,15 @@ public class ItemLivingArmour extends ItemArmor implements ISpecialArmor, IMeshP return null; } + public static boolean hasUpgrade(String id, ItemStack stack) { + if (!armourMap.containsKey(stack)) + armourMap.put(stack, getLivingArmour(stack)); + + LivingArmour armour = armourMap.get(stack); + + return armour.upgradeMap.containsKey(id); + } + public void setIsEnabled(ItemStack stack, boolean bool) { NBTHelper.checkNBT(stack); diff --git a/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java b/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java index c0d0028f..fddf6c46 100644 --- a/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java +++ b/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java @@ -1,13 +1,11 @@ package WayofTime.bloodmagic.proxy; +import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.client.IMeshProvider; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.client.helper.ShaderHelper; -import WayofTime.bloodmagic.client.render.RenderAlchemyArray; -import WayofTime.bloodmagic.client.render.RenderAltar; -import WayofTime.bloodmagic.client.render.RenderDemonCrucible; -import WayofTime.bloodmagic.client.render.RenderItemRoutingNode; +import WayofTime.bloodmagic.client.render.*; import WayofTime.bloodmagic.client.render.entity.BloodLightRenderFactory; import WayofTime.bloodmagic.client.render.entity.SentientArrowRenderFactory; import WayofTime.bloodmagic.client.render.entity.SoulSnareRenderFactory; @@ -27,6 +25,8 @@ import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.color.IItemColor; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.entity.RenderPlayer; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -36,9 +36,11 @@ import net.minecraftforge.client.model.obj.OBJLoader; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.client.registry.ClientRegistry; import net.minecraftforge.fml.client.registry.RenderingRegistry; +import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import org.apache.commons.lang3.tuple.Pair; import java.awt.*; +import java.lang.reflect.Field; public class ClientProxy extends CommonProxy { @@ -98,6 +100,8 @@ public class ClientProxy extends CommonProxy return stack.hasTagCompound() && stack.getTagCompound().hasKey("bloody") ? new Color(0x8B191B).getRGB() : 16777215; } }, Items.BREAD); + + addElytraLayer(); } @Override @@ -136,4 +140,20 @@ public class ClientProxy extends CommonProxy ModelLoader.setCustomModelResourceLocation(item, variant.getLeft(), new ModelResourceLocation(new ResourceLocation(Constants.Mod.MODID, "item/" + name), variant.getRight())); } } + + private void addElytraLayer() { + RenderManager renderManager = Minecraft.getMinecraft().getRenderManager(); + try { + Field renderPlayerField = RenderManager.class.getDeclaredField("playerRenderer"); + renderPlayerField.setAccessible(true); + Object renderPlayerObj = renderPlayerField.get(renderManager); + if (renderPlayerObj instanceof RenderPlayer) { + RenderPlayer renderPlayer = (RenderPlayer) renderPlayerObj; + renderPlayer.addLayer(new LayerBloodElytra(renderPlayer)); + } + } catch (Exception e) { + BloodMagic.instance.getLogger().error("Failed to set custom Elytra Layer for Elytra Living Armour Upgrade."); + BloodMagic.instance.getLogger().error(e.getLocalizedMessage()); + } + } } diff --git a/src/main/resources/assets/bloodmagic/textures/entities/bloodElytra.png b/src/main/resources/assets/bloodmagic/textures/entities/bloodElytra.png new file mode 100644 index 0000000000000000000000000000000000000000..511c54f8264e5cd24d62f62de17f1d9e971eabf5 GIT binary patch literal 3373 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 Doc1~c literal 0 HcmV?d00001