From 2a0d887526ee0bf91bf860a4ee69fc25fd402ceb Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 30 Jan 2026 15:01:20 +0100 Subject: [PATCH] LazPaint fucking sucks --- .../java/com/hbm/main/ResourceManager.java | 2 + .../hbm/render/item/ItemRenderLibrary.java | 182 +-------------- .../render/item/ItemRenderLibraryDoors.java | 211 ++++++++++++++++++ .../tileentity/door/RenderAirlockDoor.java | 3 +- .../tileentity/door/RenderFireDoor.java | 6 +- .../tileentity/door/RenderSecureDoor.java | 6 +- .../java/com/hbm/tileentity/DoorDecl.java | 156 +++++++------ .../models/pheodoors/airlock_door_clean.png | Bin 0 -> 11557 bytes .../models/pheodoors/airlock_door_green.png | Bin 0 -> 24774 bytes 9 files changed, 295 insertions(+), 271 deletions(-) create mode 100644 src/main/java/com/hbm/render/item/ItemRenderLibraryDoors.java create mode 100644 src/main/resources/assets/hbm/textures/models/pheodoors/airlock_door_clean.png create mode 100644 src/main/resources/assets/hbm/textures/models/pheodoors/airlock_door_green.png diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index ab9d70eb6..7d616962c 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -336,6 +336,8 @@ public class ResourceManager { public static final ResourceLocation pheo_fire_door_orange_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/fire_door_orange.png"); public static IModelCustomNamed pheo_fire_door = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/pheodoors/fire_door.obj")).asVBO(); public static final ResourceLocation pheo_airlock_door_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/airlock_door.png"); + public static final ResourceLocation pheo_airlock_door_clean_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/airlock_door_clean.png"); + public static final ResourceLocation pheo_airlock_door_green_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/airlock_door_green.png"); public static IModelCustomNamed pheo_airlock_door = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/pheodoors/airlock_door.obj")).asVBO(); public static final ResourceLocation pheo_blast_door_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/blast_door.png"); public static IModelCustomNamed pheo_blast_door = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/pheodoors/blast_door.obj")).asVBO(); diff --git a/src/main/java/com/hbm/render/item/ItemRenderLibrary.java b/src/main/java/com/hbm/render/item/ItemRenderLibrary.java index 4be2fd6bc..ff685bdb9 100644 --- a/src/main/java/com/hbm/render/item/ItemRenderLibrary.java +++ b/src/main/java/com/hbm/render/item/ItemRenderLibrary.java @@ -12,7 +12,6 @@ import com.hbm.items.weapon.ItemAmmoHIMARS.HIMARSRocket; import com.hbm.main.ResourceManager; import com.hbm.render.tileentity.RenderBobble; import com.hbm.render.tileentity.RenderDemonLamp; -import com.hbm.util.Clock; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.OpenGlHelper; @@ -26,6 +25,7 @@ public class ItemRenderLibrary { public static HashMap renderers = new HashMap(); public static void init() { + ItemRenderLibraryDoors.init(); renderers.put(Item.getItemFromBlock(ModBlocks.obj_tester), new ItemRenderBase() { public void renderInventory() { @@ -595,186 +595,6 @@ public class ItemRenderLibrary { bindTexture(ResourceManager.satdock_tex); ResourceManager.satDock.renderAll(); }}); - renderers.put(Item.getItemFromBlock(ModBlocks.vault_door), new ItemRenderBase() { - public void renderInventory() { - GL11.glTranslated(0, -5, 0); - GL11.glScaled(3, 3, 3); - } - public void renderCommon() { - bindTexture(ResourceManager.vault_cog_tex); ResourceManager.vault_cog.renderAll(); - bindTexture(ResourceManager.vault_label_101_tex); ResourceManager.vault_label.renderAll(); - }}); - renderers.put(Item.getItemFromBlock(ModBlocks.secure_access_door), new ItemRenderBase(){ - public void renderInventory() { - GL11.glTranslated(0, -3.75, 0); - GL11.glScaled(2.4, 2.4, 2.4); - } - public void renderCommon() { - GL11.glTranslated(0, 1, 0); - bindTexture(ResourceManager.pheo_secure_door_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.pheo_secure_door.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - } - }); - - renderers.put(Item.getItemFromBlock(ModBlocks.fire_door), new ItemRenderBase(){ - public void renderInventory() { - GL11.glTranslated(0, -3, 0); - GL11.glScaled(3.5, 3.5, 3.5); - } - public void renderCommon() { - int index = (int) ((Clock.get_ms() % 3000) / 1000); - Minecraft.getMinecraft().getTextureManager().bindTexture( - index == 2 ? ResourceManager.pheo_fire_door_orange_tex : - index == 1 ? ResourceManager.pheo_fire_door_black_tex : - ResourceManager.pheo_fire_door_tex); - GL11.glRotated(90, 0, 1, 0); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.pheo_fire_door.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - } - }); - - renderers.put(Item.getItemFromBlock(ModBlocks.sliding_blast_door), new ItemRenderBase(){ - public void renderInventory() { - GL11.glTranslated(0, -2.75, 0); - GL11.glScaled(2.5, 2.5, 2.5); - } - public void renderCommon() { - bindTexture(ResourceManager.pheo_blast_door_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.pheo_blast_door.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - } - }); - - renderers.put(Item.getItemFromBlock(ModBlocks.large_vehicle_door), new ItemRenderBase(){ - public void renderInventory() { - GL11.glTranslated(0, -4, 0); - GL11.glScaled(1.8, 1.8, 1.8); - } - public void renderCommon() { - GL11.glRotated(90, 0, 1, 0); - bindTexture(ResourceManager.pheo_vehicle_door_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.pheo_vehicle_door.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - } - }); - renderers.put(Item.getItemFromBlock(ModBlocks.water_door), new ItemRenderBase(){ - public void renderInventory() { - GL11.glTranslated(0, -4, 0); - GL11.glScaled(4, 4, 4); - } - public void renderCommon() { - GL11.glRotated(90, 0, 1, 0); - bindTexture(ResourceManager.pheo_water_door_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.pheo_water_door.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - } - }); - renderers.put(Item.getItemFromBlock(ModBlocks.silo_hatch), new ItemRenderBase(){ - public void renderInventory() { - GL11.glTranslated(0, -2, 0); - GL11.glScaled(2, 2, 2); - } - public void renderCommon() { - bindTexture(ResourceManager.silo_hatch_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - GL11.glRotated(90, 0, 1, 0); - ResourceManager.silo_hatch.renderPart("Frame"); - GL11.glTranslated(0, 0.875, -1.875); - GL11.glRotated(-120, 1, 0, 0); - GL11.glTranslated(0, -0.875, 1.875); - GL11.glTranslated(0, 0.25, 0); - ResourceManager.silo_hatch.renderPart("Hatch"); - GL11.glShadeModel(GL11.GL_FLAT); - } - }); - renderers.put(Item.getItemFromBlock(ModBlocks.silo_hatch_large), new ItemRenderBase(){ - public void renderInventory() { - GL11.glTranslated(0, -2, 0); - GL11.glScaled(1.5, 1.5, 1.5); - } - public void renderCommon() { - bindTexture(ResourceManager.silo_hatch_large_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - GL11.glTranslated(1, 0, 0); - GL11.glRotated(90, 0, 1, 0); - ResourceManager.silo_hatch_large.renderPart("Frame"); - GL11.glTranslated(0, 0.875, -2.875); - GL11.glRotated(-120, 1, 0, 0); - GL11.glTranslated(0, -0.875, 2.875); - GL11.glTranslated(0, 0.25, 0); - ResourceManager.silo_hatch_large.renderPart("Hatch"); - GL11.glShadeModel(GL11.GL_FLAT); - } - }); - renderers.put(Item.getItemFromBlock(ModBlocks.qe_containment), new ItemRenderBase(){ - public void renderInventory() { - GL11.glTranslated(0, -3.5, 0); - GL11.glScaled(3.8, 3.8, 3.8); - } - public void renderCommon() { - bindTexture(ResourceManager.pheo_containment_door_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.pheo_containment_door.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - } - }); - renderers.put(Item.getItemFromBlock(ModBlocks.qe_sliding_door), new ItemRenderBase(){ - public void renderInventory() { - GL11.glTranslated(0, -3, 0); - GL11.glScaled(5, 5, 5); - } - public void renderCommon() { - bindTexture(ResourceManager.pheo_sliding_door_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.pheo_sliding_door.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - } - }); - - renderers.put(Item.getItemFromBlock(ModBlocks.round_airlock_door), new ItemRenderBase(){ - public void renderInventory() { - GL11.glTranslated(0, -3.75, 0); - GL11.glScaled(3, 3, 3); - } - public void renderCommon() { - bindTexture(ResourceManager.pheo_airlock_door_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.pheo_airlock_door.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - } - }); - - renderers.put(Item.getItemFromBlock(ModBlocks.sliding_seal_door), new ItemRenderBase(){ - public void renderInventory() { - GL11.glTranslated(0, -5, 0); - GL11.glScaled(7, 7, 7); - } - public void renderCommon() { - bindTexture(ResourceManager.pheo_seal_door_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.pheo_seal_door.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - } - }); - - renderers.put(Item.getItemFromBlock(ModBlocks.blast_door), new ItemRenderBase() { - public void renderInventory() { - GL11.glTranslated(0, -3, 0); - GL11.glScaled(3, 3, 3); - } - public void renderCommon() { - bindTexture(ResourceManager.blast_door_base_tex); ResourceManager.blast_door_base.renderAll(); - bindTexture(ResourceManager.blast_door_tooth_tex); ResourceManager.blast_door_tooth.renderAll(); - bindTexture(ResourceManager.blast_door_slider_tex); ResourceManager.blast_door_slider.renderAll(); - bindTexture(ResourceManager.blast_door_block_tex); ResourceManager.blast_door_block.renderAll(); - }}); - renderers.put(Item.getItemFromBlock(ModBlocks.machine_microwave), new ItemRenderBase() { public void renderInventory() { GL11.glTranslated(0, -4, 4); diff --git a/src/main/java/com/hbm/render/item/ItemRenderLibraryDoors.java b/src/main/java/com/hbm/render/item/ItemRenderLibraryDoors.java new file mode 100644 index 000000000..95a0bd537 --- /dev/null +++ b/src/main/java/com/hbm/render/item/ItemRenderLibraryDoors.java @@ -0,0 +1,211 @@ +package com.hbm.render.item; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.ModBlocks; +import com.hbm.interfaces.NotableComments; +import com.hbm.main.ResourceManager; +import com.hbm.tileentity.DoorDecl; + +import net.minecraft.client.Minecraft; +import net.minecraft.item.Item; +import net.minecraft.util.ResourceLocation; + +// the ItemRenderLibrary system sucks and is ugly as hell but it's the quickest way of doing it +// due to the sheer size if this stupid fucking class i just janked this part out into its own thing +// that way, code hotswap doesn't take 5 years to work while vomitting out error messages like +// i vomitted out that 20 pack of soggy chicken nuggets last year +// still a better use of €15 than hollow knight +@NotableComments +public class ItemRenderLibraryDoors { + + public static void init() { + + ItemRenderLibrary.renderers.put(Item.getItemFromBlock(ModBlocks.vault_door), new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -5, 0); + GL11.glScaled(3, 3, 3); + } + public void renderCommon() { + bindTexture(ResourceManager.vault_cog_tex); ResourceManager.vault_cog.renderAll(); + bindTexture(ResourceManager.vault_label_101_tex); ResourceManager.vault_label.renderAll(); + } + }); + + ItemRenderLibrary.renderers.put(Item.getItemFromBlock(ModBlocks.secure_access_door), new ItemRenderBase(){ + public void renderInventory() { + GL11.glTranslated(0, -3.75, 0); + GL11.glScaled(2.4, 2.4, 2.4); + } + public void renderCommon() { + GL11.glTranslated(0, 1, 0); + Minecraft.getMinecraft().getTextureManager().bindTexture(DoorDecl.SECURE_ACCESS_DOOR.getCyclingSkins()); + GL11.glShadeModel(GL11.GL_SMOOTH); + ResourceManager.pheo_secure_door.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + } + }); + + ItemRenderLibrary.renderers.put(Item.getItemFromBlock(ModBlocks.fire_door), new ItemRenderBase(){ + public void renderInventory() { + GL11.glTranslated(0, -3, 0); + GL11.glScaled(3.5, 3.5, 3.5); + } + public void renderCommon() { + Minecraft.getMinecraft().getTextureManager().bindTexture(DoorDecl.FIRE_DOOR.getCyclingSkins()); + GL11.glRotated(90, 0, 1, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); + ResourceManager.pheo_fire_door.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + } + }); + + ItemRenderLibrary.renderers.put(Item.getItemFromBlock(ModBlocks.sliding_blast_door), new ItemRenderBase(){ + public void renderInventory() { + GL11.glTranslated(0, -2.75, 0); + GL11.glScaled(2.5, 2.5, 2.5); + } + public void renderCommon() { + bindTexture(ResourceManager.pheo_blast_door_tex); + GL11.glShadeModel(GL11.GL_SMOOTH); + ResourceManager.pheo_blast_door.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + } + }); + + ItemRenderLibrary.renderers.put(Item.getItemFromBlock(ModBlocks.large_vehicle_door), new ItemRenderBase(){ + public void renderInventory() { + GL11.glTranslated(0, -4, 0); + GL11.glScaled(1.8, 1.8, 1.8); + } + public void renderCommon() { + GL11.glRotated(90, 0, 1, 0); + bindTexture(ResourceManager.pheo_vehicle_door_tex); + GL11.glShadeModel(GL11.GL_SMOOTH); + ResourceManager.pheo_vehicle_door.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + } + }); + + ItemRenderLibrary.renderers.put(Item.getItemFromBlock(ModBlocks.water_door), new ItemRenderBase(){ + public void renderInventory() { + GL11.glTranslated(0, -4, 0); + GL11.glScaled(4, 4, 4); + } + public void renderCommon() { + GL11.glRotated(90, 0, 1, 0); + bindTexture(ResourceManager.pheo_water_door_tex); + GL11.glShadeModel(GL11.GL_SMOOTH); + ResourceManager.pheo_water_door.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + } + }); + + ItemRenderLibrary.renderers.put(Item.getItemFromBlock(ModBlocks.silo_hatch), new ItemRenderBase(){ + public void renderInventory() { + GL11.glTranslated(0, -2, 0); + GL11.glScaled(2, 2, 2); + } + public void renderCommon() { + bindTexture(ResourceManager.silo_hatch_tex); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glRotated(90, 0, 1, 0); + ResourceManager.silo_hatch.renderPart("Frame"); + GL11.glTranslated(0, 0.875, -1.875); + GL11.glRotated(-120, 1, 0, 0); + GL11.glTranslated(0, -0.875, 1.875); + GL11.glTranslated(0, 0.25, 0); + ResourceManager.silo_hatch.renderPart("Hatch"); + GL11.glShadeModel(GL11.GL_FLAT); + } + }); + + ItemRenderLibrary.renderers.put(Item.getItemFromBlock(ModBlocks.silo_hatch_large), new ItemRenderBase(){ + public void renderInventory() { + GL11.glTranslated(0, -2, 0); + GL11.glScaled(1.5, 1.5, 1.5); + } + public void renderCommon() { + bindTexture(ResourceManager.silo_hatch_large_tex); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glTranslated(1, 0, 0); + GL11.glRotated(90, 0, 1, 0); + ResourceManager.silo_hatch_large.renderPart("Frame"); + GL11.glTranslated(0, 0.875, -2.875); + GL11.glRotated(-120, 1, 0, 0); + GL11.glTranslated(0, -0.875, 2.875); + GL11.glTranslated(0, 0.25, 0); + ResourceManager.silo_hatch_large.renderPart("Hatch"); + GL11.glShadeModel(GL11.GL_FLAT); + } + }); + + ItemRenderLibrary.renderers.put(Item.getItemFromBlock(ModBlocks.qe_containment), new ItemRenderBase(){ + public void renderInventory() { + GL11.glTranslated(0, -3.5, 0); + GL11.glScaled(3.8, 3.8, 3.8); + } + public void renderCommon() { + bindTexture(ResourceManager.pheo_containment_door_tex); + GL11.glShadeModel(GL11.GL_SMOOTH); + ResourceManager.pheo_containment_door.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + } + }); + + ItemRenderLibrary.renderers.put(Item.getItemFromBlock(ModBlocks.qe_sliding_door), new ItemRenderBase(){ + public void renderInventory() { + GL11.glTranslated(0, -3, 0); + GL11.glScaled(5, 5, 5); + } + public void renderCommon() { + bindTexture(ResourceManager.pheo_sliding_door_tex); + GL11.glShadeModel(GL11.GL_SMOOTH); + ResourceManager.pheo_sliding_door.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + } + }); + + ItemRenderLibrary.renderers.put(Item.getItemFromBlock(ModBlocks.round_airlock_door), new ItemRenderBase(){ + public void renderInventory() { + GL11.glTranslated(0, -3.75, 0); + GL11.glScaled(3, 3, 3); + } + public void renderCommon() { + Minecraft.getMinecraft().getTextureManager().bindTexture(DoorDecl.ROUND_AIRLOCK_DOOR.getCyclingSkins()); + GL11.glShadeModel(GL11.GL_SMOOTH); + ResourceManager.pheo_airlock_door.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + } + }); + + ItemRenderLibrary.renderers.put(Item.getItemFromBlock(ModBlocks.sliding_seal_door), new ItemRenderBase(){ + public void renderInventory() { + GL11.glTranslated(0, -5, 0); + GL11.glScaled(7, 7, 7); + } + public void renderCommon() { + bindTexture(ResourceManager.pheo_seal_door_tex); + GL11.glShadeModel(GL11.GL_SMOOTH); + ResourceManager.pheo_seal_door.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + } + }); + + ItemRenderLibrary.renderers.put(Item.getItemFromBlock(ModBlocks.blast_door), new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -3, 0); + GL11.glScaled(3, 3, 3); + } + public void renderCommon() { + bindTexture(ResourceManager.blast_door_base_tex); ResourceManager.blast_door_base.renderAll(); + bindTexture(ResourceManager.blast_door_tooth_tex); ResourceManager.blast_door_tooth.renderAll(); + bindTexture(ResourceManager.blast_door_slider_tex); ResourceManager.blast_door_slider.renderAll(); + bindTexture(ResourceManager.blast_door_block_tex); ResourceManager.blast_door_block.renderAll(); + }}); + } + + private static void bindTexture(ResourceLocation res) { + Minecraft.getMinecraft().renderEngine.bindTexture(res); + } +} diff --git a/src/main/java/com/hbm/render/tileentity/door/RenderAirlockDoor.java b/src/main/java/com/hbm/render/tileentity/door/RenderAirlockDoor.java index 34d06cf5c..63aea4464 100644 --- a/src/main/java/com/hbm/render/tileentity/door/RenderAirlockDoor.java +++ b/src/main/java/com/hbm/render/tileentity/door/RenderAirlockDoor.java @@ -5,6 +5,7 @@ import java.nio.DoubleBuffer; import org.lwjgl.opengl.GL11; import com.hbm.main.ResourceManager; +import com.hbm.tileentity.DoorDecl; import com.hbm.tileentity.TileEntityDoorGeneric; import net.minecraft.client.Minecraft; @@ -17,7 +18,7 @@ public class RenderAirlockDoor implements IRenderDoors { @Override public void render(TileEntityDoorGeneric door, DoubleBuffer buf) { - Minecraft.getMinecraft().getTextureManager().bindTexture(ResourceManager.pheo_airlock_door_tex); + Minecraft.getMinecraft().getTextureManager().bindTexture(DoorDecl.ROUND_AIRLOCK_DOOR.getSkinFromIndex(door.getSkinIndex())); double maxOpen = 1.5; double open = 0; diff --git a/src/main/java/com/hbm/render/tileentity/door/RenderFireDoor.java b/src/main/java/com/hbm/render/tileentity/door/RenderFireDoor.java index a45958820..97787b158 100644 --- a/src/main/java/com/hbm/render/tileentity/door/RenderFireDoor.java +++ b/src/main/java/com/hbm/render/tileentity/door/RenderFireDoor.java @@ -5,6 +5,7 @@ import java.nio.DoubleBuffer; import org.lwjgl.opengl.GL11; import com.hbm.main.ResourceManager; +import com.hbm.tileentity.DoorDecl; import com.hbm.tileentity.TileEntityDoorGeneric; import net.minecraft.client.Minecraft; @@ -17,10 +18,7 @@ public class RenderFireDoor implements IRenderDoors { @Override public void render(TileEntityDoorGeneric door, DoubleBuffer buf) { - Minecraft.getMinecraft().getTextureManager().bindTexture( - door.getSkinIndex() == 2 ? ResourceManager.pheo_fire_door_orange_tex : - door.getSkinIndex() == 1 ? ResourceManager.pheo_fire_door_black_tex : - ResourceManager.pheo_fire_door_tex); + Minecraft.getMinecraft().getTextureManager().bindTexture(DoorDecl.FIRE_DOOR.getSkinFromIndex(door.getSkinIndex())); double maxRaise = 2.75; double raise = 0; diff --git a/src/main/java/com/hbm/render/tileentity/door/RenderSecureDoor.java b/src/main/java/com/hbm/render/tileentity/door/RenderSecureDoor.java index 8ce9be891..ee03079eb 100644 --- a/src/main/java/com/hbm/render/tileentity/door/RenderSecureDoor.java +++ b/src/main/java/com/hbm/render/tileentity/door/RenderSecureDoor.java @@ -5,6 +5,7 @@ import java.nio.DoubleBuffer; import org.lwjgl.opengl.GL11; import com.hbm.main.ResourceManager; +import com.hbm.tileentity.DoorDecl; import com.hbm.tileentity.TileEntityDoorGeneric; import net.minecraft.client.Minecraft; @@ -17,10 +18,7 @@ public class RenderSecureDoor implements IRenderDoors { @Override public void render(TileEntityDoorGeneric door, DoubleBuffer buf) { - Minecraft.getMinecraft().getTextureManager().bindTexture( - door.getSkinIndex() == 1 ? - ResourceManager.pheo_secure_door_grey_tex : - ResourceManager.pheo_secure_door_tex); + Minecraft.getMinecraft().getTextureManager().bindTexture(DoorDecl.SECURE_ACCESS_DOOR.getSkinFromIndex(door.getSkinIndex())); double maxRaise = 3.5; double raise = 0; diff --git a/src/main/java/com/hbm/tileentity/DoorDecl.java b/src/main/java/com/hbm/tileentity/DoorDecl.java index b2b6de1f3..185a6f58e 100644 --- a/src/main/java/com/hbm/tileentity/DoorDecl.java +++ b/src/main/java/com/hbm/tileentity/DoorDecl.java @@ -10,6 +10,8 @@ import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.loader.IModelCustomNamed; import com.hbm.render.tileentity.door.*; import com.hbm.util.BobMathUtil; +import com.hbm.util.Clock; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.util.AxisAlignedBB; @@ -119,7 +121,13 @@ public abstract class DoorDecl { return null; } - @Override public int getSkinCount() { return 3; } + public final ResourceLocation[] skins = new ResourceLocation[] { + ResourceManager.pheo_fire_door_tex, + ResourceManager.pheo_fire_door_black_tex, + ResourceManager.pheo_fire_door_orange_tex, + }; + + @Override public ResourceLocation[] getSEDNASkins() { return skins; } @Override public int timeToOpen() { return 160; } @Override public int[][] getDoorOpenRanges() { return new int[][] { { -1, 0, 0, 3, 4, 1 } }; } @@ -127,19 +135,12 @@ public abstract class DoorDecl { @Override public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { - if(!open) - return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 1, 1); - if(z == 1) { - return AxisAlignedBB.getBoundingBox(0.5, 0, 0, 1, 1, 1); - } else if(z == -2) { - return AxisAlignedBB.getBoundingBox(0, 0, 0, 0.5, 1, 1); - } else if(y > 1) { - return AxisAlignedBB.getBoundingBox(0, 0.75, 0, 1, 1, 1); - } else if(y == 0) { - return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.1, 1); - } else { - return super.getBlockBound(x, y, z, open, forCollision); - } + if(!open) return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 1, 1); + if(z == 1) return AxisAlignedBB.getBoundingBox(0.5, 0, 0, 1, 1, 1); + else if(z == -2) return AxisAlignedBB.getBoundingBox(0, 0, 0, 0.5, 1, 1); + else if(y > 1) return AxisAlignedBB.getBoundingBox(0, 0.75, 0, 1, 1, 1); + else if(y == 0) return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.1, 1); + else return super.getBlockBound(x, y, z, open, forCollision); } }; @@ -174,11 +175,8 @@ public abstract class DoorDecl { @Override public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { if(open) { - if(y == 3) { - return AxisAlignedBB.getBoundingBox(0, 0.5, 0, 1, 1, 1); - } else if(y == 0) { - return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.08, 1); - } + if(y == 3) return AxisAlignedBB.getBoundingBox(0, 0.5, 0, 1, 1, 1); + else if(y == 0) return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.08, 1); } return super.getBlockBound(x, y, z, open, forCollision); } @@ -208,11 +206,8 @@ public abstract class DoorDecl { @Override public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { - if(forCollision && open) { - return AxisAlignedBB.getBoundingBox(0, 0, 0, 0, 0, 0); - } else { - return AxisAlignedBB.getBoundingBox(0, 0, 1 - 0.25, 1, 1, 1); - } + if(forCollision && open) return AxisAlignedBB.getBoundingBox(0, 0, 0, 0, 0, 0); + else return AxisAlignedBB.getBoundingBox(0, 0, 1 - 0.25, 1, 1, 1); }; @Override public int[][] getDoorOpenRanges() { return new int[][] { { 0, 0, 0, 1, 2, 2 } }; } @@ -246,26 +241,21 @@ public abstract class DoorDecl { @Override public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { if(!open) { - if(y > 0) { - return AxisAlignedBB.getBoundingBox(0, 0, 0.375, 1, 1, 0.625); - } + if(y > 0) return AxisAlignedBB.getBoundingBox(0, 0, 0.375, 1, 1, 0.625); return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 1, 1); } - if(y == 1) { - return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.0625, 1); - } else if(y == 4) { - return AxisAlignedBB.getBoundingBox(0, 0.5, 0.15, 1, 1, 0.85); - } else if(y == 0) { - return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 1, 1); - }else { - return super.getBlockBound(x, y, z, open, forCollision); - } + if(y == 1) return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.0625, 1); + else if(y == 4) return AxisAlignedBB.getBoundingBox(0, 0.5, 0.15, 1, 1, 0.85); + else if(y == 0) return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 1, 1); + else return super.getBlockBound(x, y, z, open, forCollision); } - @Override - public int getSkinCount() { - return 2; - } + public final ResourceLocation[] skins = new ResourceLocation[] { + ResourceManager.pheo_secure_door_tex, + ResourceManager.pheo_secure_door_grey_tex + }; + + @Override public ResourceLocation[] getSEDNASkins() { return skins; } }; public static final DoorDecl ROUND_AIRLOCK_DOOR = new DoorDecl() { @@ -286,19 +276,21 @@ public abstract class DoorDecl { return null; } + public final ResourceLocation[] skins = new ResourceLocation[] { + ResourceManager.pheo_airlock_door_tex, + ResourceManager.pheo_airlock_door_clean_tex, + ResourceManager.pheo_airlock_door_green_tex + }; + + @Override public ResourceLocation[] getSEDNASkins() { return skins; } + @Override public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { - if(!open) - return super.getBlockBound(x, y, z, open, forCollision); - if(z == 1) { - return AxisAlignedBB.getBoundingBox(0.4, 0, 0, 1, 1, 1); - } else if(z == -2) { - return AxisAlignedBB.getBoundingBox(0, 0, 0, 0.6, 1, 1); - } else if(y == 3) { - return AxisAlignedBB.getBoundingBox(0, 0.5, 0, 1, 1, 1); - } else if(y == 0) { - return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.0625, 1); - } + if(!open) return super.getBlockBound(x, y, z, open, forCollision); + if(z == 1) return AxisAlignedBB.getBoundingBox(0.4, 0, 0, 1, 1, 1); + else if(z == -2) return AxisAlignedBB.getBoundingBox(0, 0, 0, 0.6, 1, 1); + else if(y == 3) return AxisAlignedBB.getBoundingBox(0, 0.5, 0, 1, 1, 1); + else if(y == 0) return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.0625, 1); return super.getBlockBound(x, y, z, open, forCollision); }; @@ -330,11 +322,8 @@ public abstract class DoorDecl { @Override public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { if(forCollision && open) { - if(z == 0) { - return AxisAlignedBB.getBoundingBox(1 - 0.125, 0, 1 - 0.1875, 1, 1, 1); - } else { - return AxisAlignedBB.getBoundingBox(0, 0, 1 - 0.1875, 0.125, 1, 1); - } + if(z == 0) return AxisAlignedBB.getBoundingBox(1 - 0.125, 0, 1 - 0.1875, 1, 1, 1); + else return AxisAlignedBB.getBoundingBox(0, 0, 1 - 0.1875, 0.125, 1, 1); } else { return AxisAlignedBB.getBoundingBox(0, 0, 1 - 0.1875, 1, 1, 1); } @@ -369,12 +358,9 @@ public abstract class DoorDecl { @Override public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { - if(!open) - return AxisAlignedBB.getBoundingBox(0, 0, 0.5, 1, 1, 1); - if(y > 1) - return AxisAlignedBB.getBoundingBox(0, 0.25, 0.5, 1, 1, 1); - else if(y == 0) - return AxisAlignedBB.getBoundingBox(0, 0, 0.5, 1, forCollision ? 0 : 0.125, 1); + if(!open) return AxisAlignedBB.getBoundingBox(0, 0, 0.5, 1, 1, 1); + if(y > 1) return AxisAlignedBB.getBoundingBox(0, 0.25, 0.5, 1, 1, 1); + else if(y == 0) return AxisAlignedBB.getBoundingBox(0, 0, 0.5, 1, forCollision ? 0 : 0.125, 1); return super.getBlockBound(x, y, z, open, forCollision); }; @@ -407,13 +393,9 @@ public abstract class DoorDecl { @Override public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { - if(!open) { - return AxisAlignedBB.getBoundingBox(0, 0, 0.75, 1, 1, 1); - } else if(y > 1) { - return AxisAlignedBB.getBoundingBox(0, 0.85, 0.75, 1, 1, 1); - } else if(y == 0) { - return AxisAlignedBB.getBoundingBox(0, 0, 0.75, 1, forCollision ? 0 : 0.15, 1); - } + if(!open) return AxisAlignedBB.getBoundingBox(0, 0, 0.75, 1, 1, 1); + else if(y > 1) return AxisAlignedBB.getBoundingBox(0, 0.85, 0.75, 1, 1, 1); + else if(y == 0) return AxisAlignedBB.getBoundingBox(0, 0, 0.75, 1, forCollision ? 0 : 0.15, 1); return super.getBlockBound(x, y, z, open, forCollision); }; @@ -551,15 +533,10 @@ public abstract class DoorDecl { @Override public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { - if(!open) - return super.getBlockBound(x, y, z, open, forCollision); - if(z == 3) { - return AxisAlignedBB.getBoundingBox(0.4, 0, 0, 1, 1, 1); - } else if(z == -3) { - return AxisAlignedBB.getBoundingBox(0, 0, 0, 0.6, 1, 1); - } else if(y == 0) { - return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.0625, 1); - } + if(!open) return super.getBlockBound(x, y, z, open, forCollision); + if(z == 3) return AxisAlignedBB.getBoundingBox(0.4, 0, 0, 1, 1, 1); + else if(z == -3) return AxisAlignedBB.getBoundingBox(0, 0, 0, 0.6, 1, 1); + else if(y == 0) return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.0625, 1); return super.getBlockBound(x, y, z, open, forCollision); }; @@ -592,9 +569,6 @@ public abstract class DoorDecl { return BobMathUtil.remap01_clamp(time, min, max); } - public boolean hasSkins() { return getSkinCount() > 0; } - public int getSkinCount() { return 0; } - @SideOnly(Side.CLIENT) public ResourceLocation getTextureForPart(String partName) { return getTextureForPart(0, partName); @@ -639,6 +613,26 @@ public abstract class DoorDecl { f[2] = z; return f; } + + public ResourceLocation[] getSEDNASkins() { return null; } + public boolean hasSkins() { return getSkinCount() > 0; } + + public int getSkinCount() { + ResourceLocation[] skins = this.getSEDNASkins(); + if(skins == null || skins.length <= 1) return 0; + return skins.length; + } + + public ResourceLocation getCyclingSkins() { + ResourceLocation[] skins = this.getSEDNASkins(); + int index = (int) ((Clock.get_ms() % (skins.length * 1000)) / 1000); + return skins[index]; + } + + public ResourceLocation getSkinFromIndex(int index) { + ResourceLocation[] skins = this.getSEDNASkins(); + return skins[Math.abs(index) % skins.length]; + } // keyframe animation system sneakily stitched into the door decl public IRenderDoors getSEDNARenderer() { return null; } diff --git a/src/main/resources/assets/hbm/textures/models/pheodoors/airlock_door_clean.png b/src/main/resources/assets/hbm/textures/models/pheodoors/airlock_door_clean.png new file mode 100644 index 0000000000000000000000000000000000000000..3dbd5fbe34a9783819b006e473ac78ef757e3a4a GIT binary patch literal 11557 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 w-*;GL{)vZ921v4_J7~^ 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 LNkvXXu0mjf50fx7 literal 0 HcmV?d00001