Hbm-s-Nuclear-Tech-GIT/src/main/java/com/hbm/render/item/ItemRenderMissileGeneric.java
2024-01-15 15:51:26 +01:00

193 lines
8.9 KiB
Java

package com.hbm.render.item;
import java.util.HashMap;
import java.util.function.Consumer;
import org.lwjgl.opengl.GL11;
import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.items.ModItems;
import com.hbm.main.ResourceManager;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.IItemRenderer;
import net.minecraftforge.client.model.IModelCustom;
public class ItemRenderMissileGeneric implements IItemRenderer {
public static HashMap<ComparableStack, Consumer<TextureManager>> renderers = new HashMap();
protected RenderMissileType type;
public static enum RenderMissileType {
TYPE_TIER0,
TYPE_TIER1,
TYPE_TIER2,
TYPE_TIER3,
TYPE_STEALTH,
TYPE_ABM,
TYPE_NUCLEAR,
TYPE_THERMAL,
TYPE_DOOMSDAY,
TYPE_CARRIER,
TYPE_ROBIN
}
public ItemRenderMissileGeneric(RenderMissileType type) {
this.type = type;
}
@Override
public boolean handleRenderType(ItemStack item, ItemRenderType type) {
switch(type) {
case EQUIPPED:
case EQUIPPED_FIRST_PERSON:
case ENTITY:
case INVENTORY:
return true;
default: return false;
}
}
@Override
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
return helper == ItemRendererHelper.ENTITY_BOBBING || helper == ItemRendererHelper.ENTITY_ROTATION;
}
@Override
public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
Consumer<TextureManager> renderer = renderers.get(new ComparableStack(item).makeSingular());
if(renderer == null) return;
GL11.glPushMatrix();
double guiScale = 1;
double guiOffset = 0;
switch(this.type) {
case TYPE_TIER0: guiScale = 2.25D; guiOffset = 7.5D; break;
case TYPE_TIER1: guiScale = 2.5D; guiOffset = 8.5D; break;
case TYPE_TIER2: guiScale = 2D; guiOffset = 6.5D; break;
case TYPE_TIER3: guiScale = 1.25D; guiOffset = 1D; break;
case TYPE_STEALTH: guiScale = 1.75D; guiOffset = 4.75D; break;
case TYPE_ABM: guiScale = 2.25D; guiOffset = 7D; break;
case TYPE_NUCLEAR: guiScale = 1.75D; guiOffset = 4D; break;
case TYPE_THERMAL: guiScale = 1.75D; guiOffset = 4.5D; break;
case TYPE_DOOMSDAY: guiScale = 1.5D; guiOffset = 3D; break;
case TYPE_CARRIER: guiScale = 0.625D; guiOffset = -17D; break;
case TYPE_ROBIN: guiScale = 1.25D; guiOffset = 2D; break;
}
switch(type) {
case EQUIPPED:
double s = 0.15;
GL11.glTranslated(0.5, -0.25, 0);
GL11.glScaled(s, s, s);
break;
case EQUIPPED_FIRST_PERSON:
double heldScale = 0.1;
GL11.glTranslated(0.5, 0.25, 0);
GL11.glScaled(heldScale, heldScale, heldScale);
break;
case ENTITY:
double s2 = 0.15;
GL11.glScaled(s2, s2, s2);
break;
case INVENTORY:
RenderHelper.enableGUIStandardItemLighting();
GL11.glScaled(guiScale, guiScale, guiScale);
GL11.glRotated(135, 0, 0, 1);
GL11.glRotatef(System.currentTimeMillis() / 15 % 360, 0, 1, 0);
GL11.glTranslated(0, -16 + guiOffset, 0);
break;
default: break;
}
GL11.glDisable(GL11.GL_CULL_FACE);
renderer.accept(Minecraft.getMinecraft().renderEngine);
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glPopMatrix();
}
public static Consumer<TextureManager> generateStandard(ResourceLocation texture, IModelCustom model) { return generateWithScale(texture, model, 1F); }
public static Consumer<TextureManager> generateLarge(ResourceLocation texture, IModelCustom model) { return generateWithScale(texture, model, 1.5F); }
public static Consumer<TextureManager> generateDouble(ResourceLocation texture, IModelCustom model) { return generateWithScale(texture, model, 2F); }
public static Consumer<TextureManager> generateWithScale(ResourceLocation texture, IModelCustom model, float scale) {
return x -> {
GL11.glScalef(scale, scale, scale);
GL11.glShadeModel(GL11.GL_SMOOTH);
x.bindTexture(texture); model.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
};
}
public static void init() {
renderers.put(new ComparableStack(ModItems.missile_taint), generateDouble(ResourceManager.missileTaint_tex, ResourceManager.missileTaint));
renderers.put(new ComparableStack(ModItems.missile_micro), generateDouble(ResourceManager.missileMicro_tex, ResourceManager.missileTaint));
renderers.put(new ComparableStack(ModItems.missile_bhole), generateDouble(ResourceManager.missileMicroBHole_tex, ResourceManager.missileTaint));
renderers.put(new ComparableStack(ModItems.missile_schrabidium), generateDouble(ResourceManager.missileMicroSchrab_tex, ResourceManager.missileTaint));
renderers.put(new ComparableStack(ModItems.missile_emp), generateDouble(ResourceManager.missileMicroEMP_tex, ResourceManager.missileTaint));
renderers.put(new ComparableStack(ModItems.missile_stealth), x -> {
GL11.glShadeModel(GL11.GL_SMOOTH);
x.bindTexture(ResourceManager.missileStealth_tex); ResourceManager.missileStealth.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
});
renderers.put(new ComparableStack(ModItems.missile_generic), generateStandard(ResourceManager.missileV2_HE_tex, ResourceManager.missileV2));
renderers.put(new ComparableStack(ModItems.missile_incendiary), generateStandard(ResourceManager.missileV2_IN_tex, ResourceManager.missileV2));
renderers.put(new ComparableStack(ModItems.missile_cluster), generateStandard(ResourceManager.missileV2_CL_tex, ResourceManager.missileV2));
renderers.put(new ComparableStack(ModItems.missile_buster), generateStandard(ResourceManager.missileV2_BU_tex, ResourceManager.missileV2));
renderers.put(new ComparableStack(ModItems.missile_decoy), generateStandard(ResourceManager.missileV2_decoy_tex, ResourceManager.missileV2));
renderers.put(new ComparableStack(ModItems.missile_anti_ballistic), generateStandard(ResourceManager.missileAA_tex, ResourceManager.missileABM));
renderers.put(new ComparableStack(ModItems.missile_strong), generateLarge(ResourceManager.missileStrong_HE_tex, ResourceManager.missileStrong));
renderers.put(new ComparableStack(ModItems.missile_incendiary_strong), generateLarge(ResourceManager.missileStrong_IN_tex, ResourceManager.missileStrong));
renderers.put(new ComparableStack(ModItems.missile_cluster_strong), generateLarge(ResourceManager.missileStrong_CL_tex, ResourceManager.missileStrong));
renderers.put(new ComparableStack(ModItems.missile_buster_strong), generateLarge(ResourceManager.missileStrong_BU_tex, ResourceManager.missileStrong));
renderers.put(new ComparableStack(ModItems.missile_emp_strong), generateLarge(ResourceManager.missileStrong_EMP_tex, ResourceManager.missileStrong));
renderers.put(new ComparableStack(ModItems.missile_burst), generateStandard(ResourceManager.missileHuge_HE_tex, ResourceManager.missileHuge));
renderers.put(new ComparableStack(ModItems.missile_inferno), generateStandard(ResourceManager.missileHuge_IN_tex, ResourceManager.missileHuge));
renderers.put(new ComparableStack(ModItems.missile_rain), generateStandard(ResourceManager.missileHuge_CL_tex, ResourceManager.missileHuge));
renderers.put(new ComparableStack(ModItems.missile_drill), generateStandard(ResourceManager.missileHuge_BU_tex, ResourceManager.missileHuge));
renderers.put(new ComparableStack(ModItems.missile_nuclear), generateLarge(ResourceManager.missileNuclear_tex, ResourceManager.missileNuclear));
renderers.put(new ComparableStack(ModItems.missile_nuclear_cluster), generateLarge(ResourceManager.missileMIRV_tex, ResourceManager.missileNuclear));
renderers.put(new ComparableStack(ModItems.missile_volcano), generateLarge(ResourceManager.missileVolcano_tex, ResourceManager.missileNuclear));
renderers.put(new ComparableStack(ModItems.missile_endo), generateLarge(ResourceManager.missileEndo_tex, ResourceManager.missileThermo));
renderers.put(new ComparableStack(ModItems.missile_exo), generateLarge(ResourceManager.missileExo_tex, ResourceManager.missileThermo));
renderers.put(new ComparableStack(ModItems.missile_doomsday), generateDouble(ResourceManager.missileDoomsday_tex, ResourceManager.missileDoomsday));
renderers.put(new ComparableStack(ModItems.missile_carrier), x -> {
GL11.glScalef(2F, 2F, 2F);
x.bindTexture(ResourceManager.missileCarrier_tex);
ResourceManager.missileCarrier.renderAll();
GL11.glTranslated(0.0D, 0.5D, 0.0D);
GL11.glTranslated(1.25D, 0.0D, 0.0D);
x.bindTexture(ResourceManager.missileBooster_tex);
ResourceManager.missileBooster.renderAll();
GL11.glTranslated(-2.5D, 0.0D, 0.0D);
ResourceManager.missileBooster.renderAll();
GL11.glTranslated(1.25D, 0.0D, 0.0D);
GL11.glTranslated(0.0D, 0.0D, 1.25D);
ResourceManager.missileBooster.renderAll();
GL11.glTranslated(0.0D, 0.0D, -2.5D);
ResourceManager.missileBooster.renderAll();
GL11.glTranslated(0.0D, 0.0D, 1.25D);
});
renderers.put(new ComparableStack(ModItems.missile_shuttle), generateStandard(ResourceManager.missileShuttle_tex, ResourceManager.missileShuttle));
}
}