From 41877f354312062b9c255cc66b0a6a2b00f4bd04 Mon Sep 17 00:00:00 2001 From: tterrag1098 Date: Fri, 24 Apr 2015 03:38:37 -0400 Subject: [PATCH] Completely modularize submap and RenderBlocks managing - Fix RenderBlocksCTM ignoring the renderMin/Max values - Add custom handler for carpet to avoid hardcoding - TODO blocks that use existing blocks as icons, e.g. ice stairs --- .../com/cricketcraft/chisel/Features.java | 107 +++-- .../cricketcraft/chisel/api/ICarvable.java | 2 +- .../chisel/api/carving/IVariationInfo.java | 5 +- .../chisel/api/carving/VariationInfoBase.java | 16 +- .../chisel/api/{client => rendering}/CTM.java | 13 +- .../chisel/api/{client => rendering}/Dir.java | 2 +- .../{client => rendering}/ISubmapManager.java | 5 +- .../{client => rendering}/TextureSubmap.java | 10 +- .../chisel/api/rendering/TextureType.java | 391 ++++++++++++++++++ .../chisel/api/rendering/package-info.java | 7 + .../chisel/block/BlockCarvablePillar.java | 11 +- .../chisel/carving/CarvableHelper.java | 335 +-------------- .../chisel/carving/CarvableVariation.java | 6 +- .../chisel/client/render/RenderBlocksCTM.java | 65 +-- .../client/render/RenderBlocksCTMCarpet.java | 2 +- .../render/RenderBlocksCTMFullbright.java | 4 +- .../client/render/RenderBlocksColumn.java | 15 +- .../chisel/client/render/RendererCTM.java | 39 +- .../client/render/RendererCTMFullbright.java | 43 +- .../chisel/client/render/RendererPillar.java | 5 +- .../render/SubmapManagerCarpetFloor.java | 55 +++ .../render/SubmapManagerFakeController.java | 14 +- .../chisel/config/Configurations.java | 2 +- 23 files changed, 661 insertions(+), 493 deletions(-) rename src/main/java/com/cricketcraft/chisel/api/{client => rendering}/CTM.java (97%) rename src/main/java/com/cricketcraft/chisel/api/{client => rendering}/Dir.java (98%) rename src/main/java/com/cricketcraft/chisel/api/{client => rendering}/ISubmapManager.java (85%) rename src/main/java/com/cricketcraft/chisel/api/{client => rendering}/TextureSubmap.java (93%) create mode 100644 src/main/java/com/cricketcraft/chisel/api/rendering/TextureType.java create mode 100644 src/main/java/com/cricketcraft/chisel/api/rendering/package-info.java create mode 100644 src/main/java/com/cricketcraft/chisel/client/render/SubmapManagerCarpetFloor.java diff --git a/src/main/java/com/cricketcraft/chisel/Features.java b/src/main/java/com/cricketcraft/chisel/Features.java index 4858904c..d4be54ef 100644 --- a/src/main/java/com/cricketcraft/chisel/Features.java +++ b/src/main/java/com/cricketcraft/chisel/Features.java @@ -18,9 +18,9 @@ import com.cricketcraft.chisel.api.carving.ICarvingVariation; import com.cricketcraft.chisel.api.carving.IVariationInfo; import com.cricketcraft.chisel.block.*; import com.cricketcraft.chisel.carving.CarvableHelper; -import com.cricketcraft.chisel.carving.CarvableVariation; import com.cricketcraft.chisel.carving.Carving; import com.cricketcraft.chisel.carving.CarvingGroup; +import com.cricketcraft.chisel.client.render.SubmapManagerCarpetFloor; import com.cricketcraft.chisel.client.render.SubmapManagerFakeController; import com.cricketcraft.chisel.compat.fmp.ItemBlockChiselTorchPart; import com.cricketcraft.chisel.config.Configurations; @@ -107,7 +107,7 @@ public enum Features { @Override void addBlocks() { BlockCarvable andesite = (BlockCarvable) new BlockCarvable(Material.rock).setHardness(2.0F).setResistance(10.0F).setCreativeTab(ChiselTabs.tabStoneChiselBlocks); - andesite.carverHelper.setChiselBlockName("andesite"); + andesite.carverHelper.addVariation("tile.andesite.0.desc", 0, "andesite/andesite"); andesite.carverHelper.addVariation("tile.andesite.1.desc", 1, "andesite/andesitePolished"); andesite.carverHelper.addVariation("tile.andesite.2.desc", 2, "andesite/andesitePillar"); @@ -130,7 +130,7 @@ public enum Features { @Override void addBlocks() { BlockCarvable antiBlock = (BlockCarvable) new BlockCarvableAntiBlock().setCreativeTab(ChiselTabs.tabOtherChiselBlocks); - antiBlock.carverHelper.setChiselBlockName("Anti Block"); + if (!Configurations.allowChiselCrossColors) { antiBlock.carverHelper.forbidChiseling = true; } @@ -321,7 +321,7 @@ public enum Features { void addBlocks() { BlockCarvable carpet_block = (BlockCarvable) new BlockCarvable(Material.cloth).setCreativeTab(ChiselTabs.tabOtherChiselBlocks).setHardness(2.0F).setResistance(10F) .setStepSound(Block.soundTypeCloth); - carpet_block.carverHelper.setChiselBlockName("Carpet Block"); + carpet_block.carverHelper.addVariation("tile.carpet_block.0.desc", 0, "carpet/white"); carpet_block.carverHelper.addVariation("tile.carpet_block.1.desc", 1, "carpet/orange"); carpet_block.carverHelper.addVariation("tile.carpet_block.2.desc", 2, "carpet/lily"); @@ -362,23 +362,23 @@ public enum Features { void addBlocks() { BlockMarbleCarpet carpet = (BlockMarbleCarpet) new BlockMarbleCarpet(Material.cloth).setCreativeTab(ChiselTabs.tabOtherChiselBlocks).setHardness(0.1F).setStepSound(Block.soundTypeCloth) .setLightOpacity(0).setStepSound(Block.soundTypeCloth); - carpet.carverHelper.setChiselBlockName("Carpet"); - carpet.carverHelper.addVariation("tile.carpet.0.desc", 0, "carpet/white"); - carpet.carverHelper.addVariation("tile.carpet.1.desc", 1, "carpet/orange"); - carpet.carverHelper.addVariation("tile.carpet.2.desc", 2, "carpet/lily"); - carpet.carverHelper.addVariation("tile.carpet.3.desc", 3, "carpet/lightblue"); - carpet.carverHelper.addVariation("tile.carpet.4.desc", 4, "carpet/yellow"); - carpet.carverHelper.addVariation("tile.carpet.5.desc", 5, "carpet/lightgreen"); - carpet.carverHelper.addVariation("tile.carpet.6.desc", 6, "carpet/pink"); - carpet.carverHelper.addVariation("tile.carpet.7.desc", 7, "carpet/darkgrey"); - carpet.carverHelper.addVariation("tile.carpet.8.desc", 8, "carpet/grey"); - carpet.carverHelper.addVariation("tile.carpet.9.desc", 9, "carpet/teal"); - carpet.carverHelper.addVariation("tile.carpet.10.desc", 10, "carpet/purple"); - carpet.carverHelper.addVariation("tile.carpet.11.desc", 11, "carpet/darkblue"); - carpet.carverHelper.addVariation("tile.carpet.12.desc", 12, "carpet/brown"); - carpet.carverHelper.addVariation("tile.carpet.13.desc", 13, "carpet/green"); - carpet.carverHelper.addVariation("tile.carpet.14.desc", 14, "carpet/red"); - carpet.carverHelper.addVariation("tile.carpet.15.desc", 15, "carpet/black"); + + carpet.carverHelper.addVariation("tile.carpet.0.desc", 0, new SubmapManagerCarpetFloor("white")); + carpet.carverHelper.addVariation("tile.carpet.1.desc", 1, new SubmapManagerCarpetFloor("orange")); + carpet.carverHelper.addVariation("tile.carpet.2.desc", 2, new SubmapManagerCarpetFloor("lily")); + carpet.carverHelper.addVariation("tile.carpet.3.desc", 3, new SubmapManagerCarpetFloor("lightblue")); + carpet.carverHelper.addVariation("tile.carpet.4.desc", 4, new SubmapManagerCarpetFloor("yellow")); + carpet.carverHelper.addVariation("tile.carpet.5.desc", 5, new SubmapManagerCarpetFloor("lightgreen")); + carpet.carverHelper.addVariation("tile.carpet.6.desc", 6, new SubmapManagerCarpetFloor("pink")); + carpet.carverHelper.addVariation("tile.carpet.7.desc", 7, new SubmapManagerCarpetFloor("darkgrey")); + carpet.carverHelper.addVariation("tile.carpet.8.desc", 8, new SubmapManagerCarpetFloor("grey")); + carpet.carverHelper.addVariation("tile.carpet.9.desc", 9, new SubmapManagerCarpetFloor("teal")); + carpet.carverHelper.addVariation("tile.carpet.10.desc", 10, new SubmapManagerCarpetFloor("purple")); + carpet.carverHelper.addVariation("tile.carpet.11.desc", 11, new SubmapManagerCarpetFloor("darkblue")); + carpet.carverHelper.addVariation("tile.carpet.12.desc", 12, new SubmapManagerCarpetFloor("brown")); + carpet.carverHelper.addVariation("tile.carpet.13.desc", 13, new SubmapManagerCarpetFloor("green")); + carpet.carverHelper.addVariation("tile.carpet.14.desc", 14, new SubmapManagerCarpetFloor("red")); + carpet.carverHelper.addVariation("tile.carpet.15.desc", 15, new SubmapManagerCarpetFloor("black")); if (!Configurations.allowChiselCrossColors) { carpet.carverHelper.forbidChiseling = true; } @@ -595,7 +595,7 @@ public enum Features { @Override void addBlocks() { BlockCarvable diorite = (BlockCarvable) new BlockCarvable(Material.rock).setHardness(2.0F).setResistance(10.0F).setCreativeTab(ChiselTabs.tabStoneChiselBlocks); - diorite.carverHelper.setChiselBlockName("diorite"); + diorite.carverHelper.addVariation("tile.diorite.0.desc", 0, "diorite/diorite"); diorite.carverHelper.addVariation("tile.diorite.1.desc", 1, "diorite/dioritePolished"); diorite.carverHelper.addVariation("tile.diorite.2.desc", 2, "diorite/dioritePillar"); @@ -620,7 +620,7 @@ public enum Features { BlockCarvable dirt = (BlockCarvable) new BlockCarvable(Material.ground).setCreativeTab(ChiselTabs.tabOtherChiselBlocks).setHardness(0.5F).setStepSound(Block.soundTypeGravel) .setBlockName("dirt.default"); Carving.chisel.addVariation("dirt", Blocks.dirt, 0, 0); - dirt.carverHelper.setChiselBlockName("Dirt"); + // dirt.carverHelper.addVariation("Dirt", 0, Blocks.dirt); dirt.carverHelper.addVariation("tile.dirt.0.desc", 0, "dirt/bricks"); dirt.carverHelper.addVariation("tile.dirt.1.desc", 1, "dirt/netherbricks"); @@ -682,7 +682,7 @@ public enum Features { void addBlocks() { BlockCarvable factoryblock = (BlockCarvable) new BlockCarvable(Material.iron).setCreativeTab(ChiselTabs.tabMetalChiselBlocks).setHardness(2.0F).setResistance(10F) .setStepSound(Chisel.soundMetalFootstep); - factoryblock.carverHelper.setChiselBlockName("factoryblock"); + factoryblock.carverHelper.addVariation("tile.factory.0.desc", 0, "factory/dots"); factoryblock.carverHelper.addVariation("tile.factory.1.desc", 1, "factory/rust2"); factoryblock.carverHelper.addVariation("tile.factory.2.desc", 2, "factory/rust"); @@ -724,7 +724,7 @@ public enum Features { @Override void addBlocks() { BlockCarvable fantasyblock = (BlockCarvable) new BlockCarvable(Material.rock).setCreativeTab(ChiselTabs.tabStoneChiselBlocks).setHardness(2.0F).setResistance(10F); - fantasyblock.carverHelper.setChiselBlockName("Fantasy Block"); + fantasyblock.carverHelper.addVariation("tile.fantasyblock.0.desc", 0, "fantasy/brick"); fantasyblock.carverHelper.addVariation("tile.fantasyblock.1.desc", 1, "fantasy/brick-faded"); fantasyblock.carverHelper.addVariation("tile.fantasyblock.2.desc", 2, "fantasy/brick-wear"); @@ -904,7 +904,6 @@ public enum Features { stainedGlassPane[glassId] = (BlockCarvablePane) new BlockCarvablePane(Material.glass, true).setStained(true).setHardness(0.3F).setStepSound(Block.soundTypeGlass) .setBlockName("Stained Glass Pane").setCreativeTab(ChiselTabs.tabOtherChiselBlocks); stainedGlassPane[glassId].carverHelper.registerBlock(stainedGlassPane[glassId], blockName); - stainedGlassPane[glassId].carverHelper.blockName = "Stained Glass Pane"; } stainedGlassPane[glassId].carverHelper.addVariation(sGNames[i] + " bubble glass", glassPrefix, texName + "bubble"); stainedGlassPane[glassId].carverHelper.addVariation(sGNames[i] + " glass panel", glassPrefix + 1, texName + "panel"); @@ -992,7 +991,7 @@ public enum Features { @Override void addBlocks() { BlockCarvable granite = (BlockCarvable) new BlockCarvable(Material.rock).setHardness(2.0F).setResistance(10.0F).setCreativeTab(ChiselTabs.tabStoneChiselBlocks); - granite.carverHelper.setChiselBlockName("granite"); + granite.carverHelper.addVariation("tile.granite.0.desc", 0, "granite/granite"); granite.carverHelper.addVariation("tile.granite.1.desc", 1, "granite/granitePolished"); granite.carverHelper.addVariation("tile.granite.2.desc", 2, "granite/granitePillar"); @@ -1135,7 +1134,7 @@ public enum Features { void addBlocks() { BlockCarvableIcePillar ice_pillar = (BlockCarvableIcePillar) new BlockCarvableIcePillar(Material.ice).setCreativeTab(ChiselTabs.tabOtherChiselBlocks).setHardness(0.5F).setLightOpacity(3) .setStepSound(Block.soundTypeGlass); - ice_pillar.carverHelper.setChiselBlockName("Ice Pillar"); + ice_pillar.carverHelper.addVariation("tile.icePillar.0.desc", 0, "icepillar/plainplain"); ice_pillar.carverHelper.addVariation("tile.icePillar.1.desc", 1, "icepillar/plaingreek"); ice_pillar.carverHelper.addVariation("tile.icePillar.2.desc", 2, "icepillar/greekplain"); @@ -1157,8 +1156,8 @@ public enum Features { @Override void addBlocks() { CarvableStairsMaker makerIceStairs = new CarvableStairsMaker(Blocks.ice); - makerIceStairs.carverHelper.setChiselBlockName("Ice Stairs"); - makerIceStairs.carverHelper.addVariation("tile.ice_stairs.0.desc", 0, Blocks.ice); + +// TODO makerIceStairs.carverHelper.addVariation("tile.ice_stairs.0.desc", 0, Blocks.ice); makerIceStairs.carverHelper.addVariation("tile.ice_stairs.1.desc", 1, "ice/a1-ice-light"); makerIceStairs.carverHelper.addVariation("tile.ice_stairs.2.desc", 2, "ice/a1-stonecobble-icecobble"); makerIceStairs.carverHelper.addVariation("tile.ice_stairs.3.desc", 3, "ice/a1-netherbrick-ice"); @@ -1267,7 +1266,7 @@ public enum Features { void addBlocks() { BlockCarvable laboratoryblock = (BlockCarvable) new BlockCarvable(Material.iron).setCreativeTab(ChiselTabs.tabMetalChiselBlocks).setHardness(2.0F).setResistance(10F) .setStepSound(Chisel.soundMetalFootstep); - laboratoryblock.carverHelper.setChiselBlockName("laboratoryblock"); + laboratoryblock.carverHelper.addVariation("tile.laboratory.0.desc", 0, "laboratory/wallpanel"); laboratoryblock.carverHelper.addVariation("tile.laboratory.1.desc", 1, "laboratory/dottedpanel"); laboratoryblock.carverHelper.addVariation("tile.laboratory.2.desc", 2, "laboratory/largewall"); @@ -1412,7 +1411,7 @@ public enum Features { void addBlocks() { BlockCarvable limestone = (BlockCarvable) new BlockCarvable(Material.rock).setCreativeTab(ChiselTabs.tabStoneChiselBlocks).setHardness(2.0F).setResistance(10F) .setStepSound(Block.soundTypeStone); - limestone.carverHelper.setChiselBlockName("Limestone"); + limestone.carverHelper.addVariation("tile.limestone.0.desc", 0, "limestone"); limestone.carverHelper.addVariation("tile.limestone.1.desc", 1, "limestone/terrain-cobbsmalltilelight"); limestone.carverHelper.addVariation("tile.limestone.2.desc", 2, "limestone/terrain-cob-frenchlight"); @@ -1434,7 +1433,7 @@ public enum Features { Carving.chisel.registerOre("limestone", "limestone"); BlockCarvableSlab limestone_slab = (BlockCarvableSlab) new BlockCarvableSlab(limestone).setCreativeTab(ChiselTabs.tabStoneChiselBlocks).setHardness(2.0F).setResistance(10F); - limestone_slab.carverHelper.setChiselBlockName("Limestone Slab"); + limestone_slab.carverHelper.addVariation("tile.limestoneSlab.0.desc", 0, "limestone"); limestone_slab.carverHelper.addVariation("tile.limestoneSlab.1.desc", 1, "limestone/terrain-cobbsmalltilelight"); limestone_slab.carverHelper.addVariation("tile.limestoneSlab.2.desc", 2, "limestone/terrain-cob-frenchlight"); @@ -1456,7 +1455,7 @@ public enum Features { Carving.chisel.registerOre("limestone_slab", "limestone_slab"); CarvableStairsMaker makerLimestoneStairs = new CarvableStairsMaker(limestone); - makerLimestoneStairs.carverHelper.setChiselBlockName("Limestone Stairs"); + makerLimestoneStairs.carverHelper.addVariation("tile.limestoneStairs.0.desc", 0, "limestone"); makerLimestoneStairs.carverHelper.addVariation("tile.limestoneStairs.1.desc", 1, "limestone/terrain-cobbsmalltilelight"); makerLimestoneStairs.carverHelper.addVariation("tile.limestoneStairs.2.desc", 2, "limestone/terrain-cob-frenchlight"); @@ -1489,7 +1488,7 @@ public enum Features { void addBlocks() { BlockCarvable marble = (BlockCarvable) new BlockCarvable(Material.rock).setCreativeTab(ChiselTabs.tabStoneChiselBlocks).setHardness(2.0F).setResistance(10F) .setStepSound(Block.soundTypeStone); - marble.carverHelper.setChiselBlockName("Marble"); + marble.carverHelper.addVariation("tile.marble.0.desc", 0, "marble"); marble.carverHelper.addVariation("tile.marble.1.desc", 1, "marble/a1-stoneornamental-marblebrick"); marble.carverHelper.addVariation("tile.marble.2.desc", 2, "marble/a1-stoneornamental-marbleclassicpanel"); @@ -1512,7 +1511,7 @@ public enum Features { Carving.chisel.registerOre("marble", "marble"); BlockCarvableSlab marble_slab = (BlockCarvableSlab) new BlockCarvableSlab(marble).setHardness(2.0F).setResistance(10F); - marble_slab.carverHelper.setChiselBlockName("Marble Slab"); + marble_slab.carverHelper.addVariation("tile.marbleSlab.0.desc", 0, "marble"); marble_slab.carverHelper.addVariation("tile.marbleSlab.1.desc", 1, "marbleslab/a1-stoneornamental-marblebrick"); marble_slab.carverHelper.addVariation("tile.marbleSlab.2.desc", 2, "marbleslab/a1-stoneornamental-marbleclassicpanel"); @@ -1534,7 +1533,7 @@ public enum Features { Carving.chisel.registerOre("marble_slab", "marble_slab"); CarvableStairsMaker makerMarbleStairs = new CarvableStairsMaker(marble); - makerMarbleStairs.carverHelper.setChiselBlockName("Marble Stairs"); + makerMarbleStairs.carverHelper.addVariation("tile.marbleStairs.0.desc", 0, "marble"); makerMarbleStairs.carverHelper.addVariation("tile.marbleStairs.6.desc", 1, "marbleslab/a1-stoneornamental-marblebrick"); makerMarbleStairs.carverHelper.addVariation("tile.marbleStairs.2.desc", 2, "marbleslab/a1-stoneornamental-marbleclassicpanel"); @@ -1570,7 +1569,7 @@ public enum Features { if (Configurations.oldPillars) { marble_pillar = (BlockCarvable) new BlockCarvable(Material.rock).setCreativeTab(ChiselTabs.tabStoneChiselBlocks).setHardness(2.0F).setResistance(10F) .setStepSound(Block.soundTypeStone); - marble_pillar.carverHelper.setChiselBlockName("Marble Pillar"); + marble_pillar.carverHelper.addVariation("tile.marblePillarOld.0.desc", 0, "marblepillarold/column"); marble_pillar.carverHelper.addVariation("tile.marblePillarOld.1.desc", 1, "marblepillarold/capstone"); marble_pillar.carverHelper.addVariation("tile.marblePillarOld.2.desc", 2, "marblepillarold/base"); @@ -1590,7 +1589,7 @@ public enum Features { } else { marble_pillar = (BlockCarvable) new BlockCarvablePillar(Material.rock).setCreativeTab(ChiselTabs.tabStoneChiselBlocks).setHardness(2.0F).setResistance(10F) .setStepSound(Block.soundTypeStone); - marble_pillar.carverHelper.setChiselBlockName("Marble Pillar"); + marble_pillar.carverHelper.addVariation("tile.marblePillar.0.desc", 0, "marblepillar/pillar"); marble_pillar.carverHelper.addVariation("tile.marblePillar.1.desc", 1, "marblepillar/default"); marble_pillar.carverHelper.addVariation("tile.marblePillar.2.desc", 2, "marblepillar/simple"); @@ -1612,7 +1611,7 @@ public enum Features { BlockCarvableSlab marble_pillar_slab = (BlockCarvableSlab) new BlockCarvableSlab(marble_pillar).setCreativeTab(ChiselTabs.tabStoneChiselBlocks).setHardness(2.0F).setResistance(10F) .setStepSound(Block.soundTypeStone); - marble_pillar_slab.carverHelper.setChiselBlockName("Marble Pillar Slab"); + if (Configurations.oldPillars) { marble_pillar_slab.carverHelper.addVariation("tile.marblePillarSlabOld.0.desc", 0, "marblepillarslabold/column"); marble_pillar_slab.carverHelper.addVariation("tile.marblePillarSlabOld.1.desc", 1, "marblepillarslabold/capstone"); @@ -1812,7 +1811,7 @@ public enum Features { void addBlocks() { BlockCarvablePackedIcePillar packedice_pillar = (BlockCarvablePackedIcePillar) new BlockCarvablePackedIcePillar(Material.ice).setCreativeTab(ChiselTabs.tabOtherChiselBlocks) .setHardness(0.5F).setLightOpacity(3).setStepSound(Block.soundTypeGlass); - packedice_pillar.carverHelper.setChiselBlockName("Packed Ice Pillar"); + packedice_pillar.carverHelper.addVariation("tile.packedice_pillar.0.desc", 0, "icepillar/plainplain"); packedice_pillar.carverHelper.addVariation("tile.packedice_pillar.1.desc", 1, "icepillar/plaingreek"); packedice_pillar.carverHelper.addVariation("tile.packedice_pillar.2.desc", 2, "icepillar/greekplain"); @@ -1829,8 +1828,8 @@ public enum Features { @Override void addBlocks() { CarvableStairsMaker makerPackedIceStairs = new CarvableStairsMaker(Blocks.packed_ice); - makerPackedIceStairs.carverHelper.setChiselBlockName("Packed Ice Stairs"); - makerPackedIceStairs.carverHelper.addVariation("tile.packedice_stairs.0.desc", 0, Blocks.packed_ice); + +// TODO makerPackedIceStairs.carverHelper.addVariation("tile.packedice_stairs.0.desc", 0, Blocks.packed_ice); makerPackedIceStairs.carverHelper.addVariation("tile.packedice_stairs.1.desc", 1, "ice/a1-ice-light"); makerPackedIceStairs.carverHelper.addVariation("tile.packedice_stairs.2.desc", 2, "ice/a1-stonecobble-icecobble"); makerPackedIceStairs.carverHelper.addVariation("tile.packedice_stairs.3.desc", 3, "ice/a1-netherbrick-ice"); @@ -1862,7 +1861,7 @@ public enum Features { @Override void addBlocks() { BlockCarvablePane paperwall = (BlockCarvablePane) new BlockCarvablePane(Material.ground, true).setCreativeTab(ChiselTabs.tabOtherChiselBlocks).setHardness(0.5F).setResistance(0.5F); - paperwall.carverHelper.setChiselBlockName("Paper Wall"); + paperwall.carverHelper.addVariation("tile.paperwall.0.desc", 0, "paper/box"); paperwall.carverHelper.addVariation("tile.paperwall.1.desc", 1, "paper/throughMiddle"); paperwall.carverHelper.addVariation("tile.paperwall.2.desc", 2, "paper/cross"); @@ -1877,7 +1876,7 @@ public enum Features { Carving.chisel.registerOre("paperwall", "paperwall"); BlockCarvable paperwall_block = (BlockCarvable) new BlockCarvable(Material.ground).setCreativeTab(ChiselTabs.tabOtherChiselBlocks).setHardness(0.5F).setResistance(0.5F); - paperwall_block.carverHelper.setChiselBlockName("Paper Wall Block"); + paperwall_block.carverHelper.addVariation("tile.paperwall.0.desc", 0, "paper/box"); paperwall_block.carverHelper.addVariation("tile.paperwall.1.desc", 1, "paper/throughMiddle"); paperwall_block.carverHelper.addVariation("tile.paperwall.2.desc", 2, "paper/cross"); @@ -1905,7 +1904,8 @@ public enum Features { void addBlocks() { BlockPresent present = (BlockPresent) new BlockPresent().setCreativeTab(ChiselTabs.tabOtherChiselBlocks).setHardness(2.0F).setResistance(10.0F).setBlockName("chisel.present"); for (int i = 0; i < 16; i++) { - present.carverHelper.addVariation("tile.chisel.present.desc", i, Blocks.chest); + // TODO + present.carverHelper.addVariation("tile.chisel.present.desc", i, "paper/box"); } present.carverHelper.registerAll(present, "present", ItemBlockPresent.class); Carving.chisel.registerOre("present", "chest"); @@ -2421,7 +2421,7 @@ public enum Features { void addBlocks() { BlockCarvable templeblock = (BlockCarvable) new BlockEldritch().setHardness(2.0F).setCreativeTab(ChiselTabs.tabStoneChiselBlocks).setResistance(10F) .setStepSound(Chisel.soundTempleFootstep); - templeblock.carverHelper.setChiselBlockName("Temple Block"); + templeblock.carverHelper.addVariation("tile.templeblock.0.desc", 0, "temple/cobble"); templeblock.carverHelper.addVariation("tile.templeblock.1.desc", 1, "temple/ornate"); templeblock.carverHelper.addVariation("tile.templeblock.2.desc", 2, "temple/plate"); @@ -2454,7 +2454,7 @@ public enum Features { void addBlocks() { BlockCarvable mossy_templeblock = (BlockCarvable) new BlockEldritch().setHardness(2.0F).setCreativeTab(ChiselTabs.tabStoneChiselBlocks).setResistance(10F) .setStepSound(Chisel.soundTempleFootstep); - mossy_templeblock.carverHelper.setChiselBlockName("Mossy Temple Block"); + mossy_templeblock.carverHelper.addVariation("tile.mossy_templeblock.0.desc", 0, "templemossy/cobble"); mossy_templeblock.carverHelper.addVariation("tile.mossy_templeblock.1.desc", 1, "templemossy/ornate"); mossy_templeblock.carverHelper.addVariation("tile.mossy_templeblock.2.desc", 2, "templemossy/plate"); @@ -2585,7 +2585,7 @@ public enum Features { void addBlocks() { BlockCarvable tyrian = (BlockCarvable) new BlockCarvable(Material.iron).setCreativeTab(ChiselTabs.tabMetalChiselBlocks).setHardness(5.0F).setResistance(10.0F) .setStepSound(Block.soundTypeMetal); - tyrian.carverHelper.setChiselBlockName("Futuristic Armor Plating Block"); + tyrian.carverHelper.addVariation("tile.tyrian.0.desc", 0, "tyrian/shining"); tyrian.carverHelper.addVariation("tile.tyrian.1.desc", 1, "tyrian/tyrian"); tyrian.carverHelper.addVariation("tile.tyrian.2.desc", 2, "tyrian/chaotic"); @@ -2689,7 +2689,7 @@ public enum Features { Carving.chisel.registerOre("voidstone2", "voidstone2"); BlockCarvable voidstoneRunic = (BlockCarvable) new BlockCarvable(Material.rock).setCreativeTab(ChiselTabs.tabStoneChiselBlocks).setHardness(5.0F).setResistance(10.0F); - voidstoneRunic.carverHelper.setChiselBlockName("Voidstone Runic"); + for (int i = 1; i < 16; i++) voidstoneRunic.carverHelper.addVariation("tile.voidstoneRunic." + sGNames[i].replaceAll(" ", "").toLowerCase() + ".desc", i, "voidstone/runes/rune" + sGNames[i].replaceAll(" ", "")); @@ -2796,7 +2796,7 @@ public enum Features { final String name = n.replace('-', '_') + "_planks"; planks[i] = (BlockCarvable) (new BlockCarvable(Material.wood)).setCreativeTab(ChiselTabs.tabWoodChiselBlocks).setHardness(2.0F).setResistance(5.0F).setStepSound(Block.soundTypeWood); - planks[i].carverHelper.setChiselBlockName(u + " Wood Planks"); + planks[i].carverHelper.addVariation("Smooth " + n + " wood planks", 1, "planks-" + n + "/clean"); planks[i].carverHelper.addVariation("Short " + n + " wood planks", 2, "planks-" + n + "/short"); planks[i].carverHelper.addVariation("Fancy " + n + " wood plank arrangement", 6, "planks-" + n + "/fancy"); @@ -2826,7 +2826,7 @@ public enum Features { @Override void addBlocks() { BlockCarvable woolen_clay = (BlockCarvable) new BlockCarvable(Material.clay).setCreativeTab(ChiselTabs.tabOtherChiselBlocks).setHardness(2F).setResistance(10F); - woolen_clay.carverHelper.setChiselBlockName("Woolen Clay"); + for (int i = 0; i < 16; i++) woolen_clay.carverHelper.addVariation("tile.woolenClay." + i + ".desc", i, "woolenClay/" + sGNames[i].replaceAll(" ", "").toLowerCase()); @@ -2847,8 +2847,7 @@ public enum Features { boolean needsMetaRecipes() { return true; } - }, - ; + }; private static final String[] dyeOres = { "dyeBlack", "dyeRed", "dyeGreen", "dyeBrown", "dyeBlue", "dyePurple", "dyeCyan", "dyeLightGray", "dyeGray", "dyePink", "dyeLime", "dyeYellow", "dyeLightBlue", "dyeMagenta", "dyeOrange", "dyeWhite" }; diff --git a/src/main/java/com/cricketcraft/chisel/api/ICarvable.java b/src/main/java/com/cricketcraft/chisel/api/ICarvable.java index e9dc7a92..11eee33f 100644 --- a/src/main/java/com/cricketcraft/chisel/api/ICarvable.java +++ b/src/main/java/com/cricketcraft/chisel/api/ICarvable.java @@ -4,7 +4,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.world.IBlockAccess; import com.cricketcraft.chisel.api.carving.IVariationInfo; -import com.cricketcraft.chisel.api.client.ISubmapManager; +import com.cricketcraft.chisel.api.rendering.ISubmapManager; import com.cricketcraft.chisel.carving.CarvableHelper; /** diff --git a/src/main/java/com/cricketcraft/chisel/api/carving/IVariationInfo.java b/src/main/java/com/cricketcraft/chisel/api/carving/IVariationInfo.java index 44f5e45d..6846db17 100644 --- a/src/main/java/com/cricketcraft/chisel/api/carving/IVariationInfo.java +++ b/src/main/java/com/cricketcraft/chisel/api/carving/IVariationInfo.java @@ -1,6 +1,7 @@ package com.cricketcraft.chisel.api.carving; -import com.cricketcraft.chisel.api.client.ISubmapManager; +import com.cricketcraft.chisel.api.rendering.ISubmapManager; +import com.cricketcraft.chisel.api.rendering.TextureType; public interface IVariationInfo { @@ -9,4 +10,6 @@ public interface IVariationInfo { ICarvingVariation getVariation(); String getDescription(); + + TextureType getType(); } diff --git a/src/main/java/com/cricketcraft/chisel/api/carving/VariationInfoBase.java b/src/main/java/com/cricketcraft/chisel/api/carving/VariationInfoBase.java index 001d409a..7bd1aa86 100644 --- a/src/main/java/com/cricketcraft/chisel/api/carving/VariationInfoBase.java +++ b/src/main/java/com/cricketcraft/chisel/api/carving/VariationInfoBase.java @@ -1,6 +1,7 @@ package com.cricketcraft.chisel.api.carving; -import com.cricketcraft.chisel.api.client.ISubmapManager; +import com.cricketcraft.chisel.api.rendering.ISubmapManager; +import com.cricketcraft.chisel.api.rendering.TextureType; import net.minecraft.util.StatCollector; @@ -9,11 +10,17 @@ public class VariationInfoBase implements IVariationInfo { private ICarvingVariation variation; private String unlocDesc; private ISubmapManager manager; - + private TextureType type; + public VariationInfoBase(ICarvingVariation variation, String unlocDesc, ISubmapManager manager) { + this(variation, unlocDesc, manager, TextureType.CUSTOM); + } + + public VariationInfoBase(ICarvingVariation variation, String unlocDesc, ISubmapManager manager, TextureType type) { this.variation = variation; this.unlocDesc = unlocDesc; this.manager = manager; + this.type = type; } @Override @@ -30,4 +37,9 @@ public class VariationInfoBase implements IVariationInfo { public ISubmapManager getSubmapManager() { return manager; } + + @Override + public TextureType getType() { + return type; + } } diff --git a/src/main/java/com/cricketcraft/chisel/api/client/CTM.java b/src/main/java/com/cricketcraft/chisel/api/rendering/CTM.java similarity index 97% rename from src/main/java/com/cricketcraft/chisel/api/client/CTM.java rename to src/main/java/com/cricketcraft/chisel/api/rendering/CTM.java index a4f4e07a..1ce46f12 100644 --- a/src/main/java/com/cricketcraft/chisel/api/client/CTM.java +++ b/src/main/java/com/cricketcraft/chisel/api/rendering/CTM.java @@ -1,4 +1,4 @@ -package com.cricketcraft.chisel.api.client; +package com.cricketcraft.chisel.api.rendering; import gnu.trove.map.TIntObjectMap; import gnu.trove.map.hash.TIntObjectHashMap; @@ -12,7 +12,7 @@ import net.minecraftforge.common.util.ForgeDirection; import com.cricketcraft.chisel.api.IFacade; import com.google.common.collect.Maps; -import static com.cricketcraft.chisel.api.client.Dir.*; +import static com.cricketcraft.chisel.api.rendering.Dir.*; // @formatter:off /** @@ -68,15 +68,15 @@ import static com.cricketcraft.chisel.api.client.Dir.*; public class CTM { /** Some hardcoded offset values for the different corner indeces */ - private int[] submapOffsets = { 4, 5, 1, 0 }; - private TIntObjectMap submapMap = new TIntObjectHashMap(); + private static int[] submapOffsets = { 4, 5, 1, 0 }; + private static TIntObjectMap submapMap = new TIntObjectHashMap(); private static EnumMap connectionMap = Maps.newEnumMap(Dir.class); /** For use via the Chisel 2 config only, altering this could cause unintended behavior */ public static boolean disableObscuredFaceCheckConfig = false; public Boolean disableObscuredFaceCheck = null; - private CTM() { + static { for (Dir dir : Dir.VALUES) { connectionMap.put(dir, false); } @@ -86,6 +86,9 @@ public class CTM { submapMap.put(2, new Dir[] { TOP, RIGHT, TOP_RIGHT }); submapMap.put(3, new Dir[] { TOP, LEFT, TOP_LEFT }); } + + private CTM() { + } public static CTM getInstance() { return new CTM(); diff --git a/src/main/java/com/cricketcraft/chisel/api/client/Dir.java b/src/main/java/com/cricketcraft/chisel/api/rendering/Dir.java similarity index 98% rename from src/main/java/com/cricketcraft/chisel/api/client/Dir.java rename to src/main/java/com/cricketcraft/chisel/api/rendering/Dir.java index b4dafe6a..98fd6de6 100644 --- a/src/main/java/com/cricketcraft/chisel/api/client/Dir.java +++ b/src/main/java/com/cricketcraft/chisel/api/rendering/Dir.java @@ -1,4 +1,4 @@ -package com.cricketcraft.chisel.api.client; +package com.cricketcraft.chisel.api.rendering; import net.minecraft.block.Block; import net.minecraft.world.IBlockAccess; diff --git a/src/main/java/com/cricketcraft/chisel/api/client/ISubmapManager.java b/src/main/java/com/cricketcraft/chisel/api/rendering/ISubmapManager.java similarity index 85% rename from src/main/java/com/cricketcraft/chisel/api/client/ISubmapManager.java rename to src/main/java/com/cricketcraft/chisel/api/rendering/ISubmapManager.java index 3fd194c5..20c47975 100644 --- a/src/main/java/com/cricketcraft/chisel/api/client/ISubmapManager.java +++ b/src/main/java/com/cricketcraft/chisel/api/rendering/ISubmapManager.java @@ -1,6 +1,7 @@ -package com.cricketcraft.chisel.api.client; +package com.cricketcraft.chisel.api.rendering; import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; @@ -34,4 +35,6 @@ public interface ISubmapManager { * The IIconRegister instance. */ void registerIcons(String modName, Block block, IIconRegister register); + + RenderBlocks createRenderContext(RenderBlocks rendererOld, IBlockAccess world); } \ No newline at end of file diff --git a/src/main/java/com/cricketcraft/chisel/api/client/TextureSubmap.java b/src/main/java/com/cricketcraft/chisel/api/rendering/TextureSubmap.java similarity index 93% rename from src/main/java/com/cricketcraft/chisel/api/client/TextureSubmap.java rename to src/main/java/com/cricketcraft/chisel/api/rendering/TextureSubmap.java index a866552b..ea2108f3 100644 --- a/src/main/java/com/cricketcraft/chisel/api/client/TextureSubmap.java +++ b/src/main/java/com/cricketcraft/chisel/api/rendering/TextureSubmap.java @@ -1,4 +1,4 @@ -package com.cricketcraft.chisel.api.client; +package com.cricketcraft.chisel.api.rendering; import java.util.List; @@ -79,9 +79,11 @@ public class TextureSubmap { */ @SubscribeEvent public final void TexturesStitched(TextureStitchEvent.Post event) { - for (int x = 0; x < width; x++) { - for (int y = 0; y < height; y++) { - icons[x][y] = new TextureVirtual(getBaseIcon(), width, height, x, y); + for (TextureSubmap ts : submaps) { + for (int x = 0; x < ts.width; x++) { + for (int y = 0; y < ts.height; y++) { + ts.icons[x][y] = new TextureVirtual(ts.getBaseIcon(), ts.width, ts.height, x, y); + } } } } diff --git a/src/main/java/com/cricketcraft/chisel/api/rendering/TextureType.java b/src/main/java/com/cricketcraft/chisel/api/rendering/TextureType.java new file mode 100644 index 00000000..c595fcc6 --- /dev/null +++ b/src/main/java/com/cricketcraft/chisel/api/rendering/TextureType.java @@ -0,0 +1,391 @@ +package com.cricketcraft.chisel.api.rendering; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.IBlockAccess; + +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.tuple.Pair; +import org.apache.commons.lang3.tuple.Triple; + +import com.cricketcraft.chisel.api.carving.ICarvingVariation; +import com.cricketcraft.chisel.carving.CarvableHelper; +import com.cricketcraft.chisel.client.render.RenderBlocksCTM; +import com.cricketcraft.chisel.client.render.RenderBlocksColumn; + +/** + * Handles all default {@link ISubmapManager} behavior + */ +@SuppressWarnings("unchecked") +public enum TextureType { + + // @formatter:off + TOPSIDE("top", "side") { + @Override + protected Object registerIcons(ICarvingVariation variation, String modName, String texturePath, IIconRegister register) { + return new IIcon[]{ + register.registerIcon(modName + ":" + texturePath + "-side"), + register.registerIcon(modName + ":" + texturePath + "-top") + }; + } + + @Override + protected IIcon getIcon(ICarvingVariation variation, Object cachedObject, int side, int meta) { + IIcon[] icons = (IIcon[]) cachedObject; + return side > 1 ? icons[0] : icons[1]; + } + }, + TOPBOTSIDE("top", "bottom", "side"){ + @Override + protected Object registerIcons(ICarvingVariation variation, String modName, String texturePath, IIconRegister register) { + return new IIcon[]{ + register.registerIcon(modName + ":" + texturePath + "-side"), + register.registerIcon(modName + ":" + texturePath + "-bottom"), + register.registerIcon(modName + ":" + texturePath + "-top") + }; + } + + @Override + protected IIcon getIcon(ICarvingVariation variation, Object cachedObject, int side, int meta) { + IIcon[] icons = (IIcon[]) cachedObject; + return side > 1 ? icons[0] : icons[side + 1]; + } + }, + CTMV("ctmv", "top"){ + @Override + protected Object registerIcons(ICarvingVariation variation, String modName, String texturePath, IIconRegister register) { + return Pair.of(new TextureSubmap(register.registerIcon(modName + ":" + texturePath + "-ctmv"), 2, 2), register.registerIcon(modName + ":" + texturePath + "-top")); + } + + @Override + protected IIcon getIcon(ICarvingVariation variation, Object cachedObject, int side, int meta) { + Pair data = (Pair) cachedObject; + return side < 2 ? data.getRight() : data.getLeft().getSubIcon(0, 0); + } + + @Override + protected IIcon getIcon(ICarvingVariation variation, Object cachedObject, IBlockAccess world, int x, int y, int z, int side, int meta) { + Pair data = (Pair) cachedObject; + if (side < 2) + return data.getLeft(); + + Block block = world.getBlock(x, y, z); + boolean topConnected = ctm.isConnected(world, x, y + 1, z, side, block, meta); + boolean botConnected = ctm.isConnected(world, x, y - 1, z, side, block, meta); + + TextureSubmap map = data.getRight(); + if (topConnected && botConnected) + return map.getSubIcon(0, 1); + if (topConnected && !botConnected) + return map.getSubIcon(1, 1); + if (!topConnected && botConnected) + return map.getSubIcon(1, 0); + return map.getSubIcon(0, 0); + } + + @Override + protected RenderBlocks createRenderContext(RenderBlocks rendererOld, IBlockAccess world, Object cachedObject) { + RenderBlocksColumn ret = theRenderBlocksColumn; + Pair data = (Pair) cachedObject; + + ret.blockAccess = world; + ret.renderMaxX = 1.0; + ret.renderMaxY = 1.0; + ret.renderMaxZ = 1.0; + + ret.submap = data.getRight(); + ret.iconTop = data.getLeft(); + return ret; + } + }, + CTMH("ctmh", "top"){ + @Override + protected Object registerIcons(ICarvingVariation variation, String modName, String texturePath, IIconRegister register) { + return Pair.of(new TextureSubmap(register.registerIcon(modName + ":" + texturePath + "-ctmh"), 2, 2), register.registerIcon(modName + ":" + texturePath + "-top")); + } + + @Override + protected IIcon getIcon(ICarvingVariation variation, Object cachedObject, int side, int meta) { + return CTMV.getIcon(variation, cachedObject, side, meta); + } + + @Override + protected IIcon getIcon(ICarvingVariation variation, Object cachedObject, IBlockAccess world, int x, int y, int z, int side, int meta) { + Pair data = (Pair) cachedObject; + if (side < 2) + return data.getLeft(); + + Block block = ctm.getBlockOrFacade(world, x, y, z, side); + + boolean p; + boolean n; + boolean reverse = side == 2 || side == 5; + + if (side < 4) { + p = ctm.isConnected(world, x - 1, y, z, side, block, meta); + n = ctm.isConnected(world, x + 1, y, z, side, block, meta); + } else { + p = ctm.isConnected(world, x, y, z - 1, side, block, meta); + n = ctm.isConnected(world, x, y, z + 1, side, block, meta); + } + + TextureSubmap map = data.getRight(); + if (p && n) + return map.getSubIcon(1, 0); + else if (p) + return map.getSubIcon(reverse ? 0 : 1, 1); + else if (n) + return map.getSubIcon(reverse ? 0 : 1, 1); + return map.getSubIcon(0, 0); + } + }, + V9("v9"){ + @Override + protected Object registerIcons(ICarvingVariation variation, String modName, String texturePath, IIconRegister register) { + return new TextureSubmap(register.registerIcon(modName + ":" + texturePath + "-v9"), 3, 3); + } + + @Override + protected IIcon getIcon(ICarvingVariation variation, Object cachedObject, int side, int meta) { + return ((TextureSubmap)cachedObject).getSubIcon(1, 1); + } + + @Override + protected IIcon getIcon(ICarvingVariation variation, Object cachedObject, IBlockAccess world, int x, int y, int z, int side, int meta) { + int variationSize = (this == TextureType.V9) ? 3 : 2; + TextureSubmap map = (TextureSubmap) cachedObject; + + int xModulus = x % variationSize; + int zModulus = z % variationSize; + //This ensures that blocks placed near 0,0 or it's axis' do not misbehave + int textureX = (xModulus < 0) ? (xModulus + variationSize) : xModulus; + int textureZ = (zModulus < 0) ? (zModulus + variationSize) : zModulus; + //Always invert the y index + int textureY = (variationSize - (y % variationSize) - 1); + + if (side == 2 || side == 5) { + //For WEST, SOUTH reverse the indexes for both X and Z + textureX = (variationSize - textureX - 1); + textureZ = (variationSize - textureZ - 1); + } /*else if (side == 0) { + //For DOWN, reverse the indexes for only Z + textureZ = (variationSize - textureZ - 1); + }*/ + + int index; + if (side == 0 || side == 1) { + // DOWN || UP + index = textureX + textureZ * variationSize; + } else if (side == 2 || side == 3) { + // NORTH || SOUTH + index = textureX + textureY * variationSize; + } else { + // WEST || EAST + index = textureZ + textureY * variationSize; + } + + return map.getSubIcon(index % variationSize, index / variationSize); + } + }, + V4("v4"){ + @Override + protected Object registerIcons(ICarvingVariation variation, String modName, String texturePath, IIconRegister register) { + return new TextureSubmap(register.registerIcon(modName + ":" + texturePath + "-v4"), 3, 3); + } + + @Override + protected IIcon getIcon(ICarvingVariation variation, Object cachedObject, int side, int meta) { + return ((TextureSubmap)cachedObject).getSubIcon(0, 0); + } + + @Override + protected IIcon getIcon(ICarvingVariation variation, Object cachedObject, IBlockAccess world, int x, int y, int z, int side, int meta) { + return V9.getIcon(variation, cachedObject, world, x, y, z, side, meta); + } + }, + CTMX("", "ctm"){ + @Override + protected Object registerIcons(ICarvingVariation variation, String modName, String texturePath, IIconRegister register) { + IIcon baseIcon = register.registerIcon(modName + ":" + texturePath); + return Triple.of( + baseIcon, + new TextureSubmap(register.registerIcon(modName + ":" + texturePath + "-ctm"), 4, 4), + new TextureSubmap(baseIcon, 2, 2) + ); + } + + @Override + protected IIcon getIcon(ICarvingVariation variation, Object cachedObject, int side, int meta) { + return ((Triple)cachedObject).getLeft(); + } + + @Override + protected RenderBlocks createRenderContext(RenderBlocks rendererOld, IBlockAccess world, Object cachedObject) { + RenderBlocksCTM ret = theRenderBlocksCTM; + Triple data = (Triple) cachedObject; + ret.blockAccess = world; + ret.renderMaxX = 1.0; + ret.renderMaxY = 1.0; + ret.renderMaxZ = 1.0; + + ret.submap = data.getMiddle(); + ret.submapSmall = data.getRight(); + + ret.rendererOld = rendererOld; + return ret; + } + }, + R16("r16"){ + @Override + protected Object registerIcons(ICarvingVariation variation, String modName, String texturePath, IIconRegister register) { + return new TextureSubmap(register.registerIcon(modName + ":" + texturePath + "-r16"), 4, 4); + } + + @Override + protected IIcon getIcon(ICarvingVariation variation, Object cachedObject, int side, int meta) { + return V9.getIcon(variation, cachedObject, side, meta); + } + }, + R9("r9"){ + @Override + protected Object registerIcons(ICarvingVariation variation, String modName, String texturePath, IIconRegister register) { + return new TextureSubmap(register.registerIcon(modName + ":" + texturePath + "-r9"), 3, 3); + } + + @Override + protected IIcon getIcon(ICarvingVariation variation, Object cachedObject, int side, int meta) { + return V9.getIcon(variation, cachedObject, side, meta); + } + + @Override + protected IIcon getIcon(ICarvingVariation variation, Object cachedObject, IBlockAccess world, int x, int y, int z, int side, int meta) { + return R4.getIcon(variation, cachedObject, side, meta); + } + }, + R4("r4"){ + + @Override + protected Object registerIcons(ICarvingVariation variation, String modName, String texturePath, IIconRegister register) { + return new TextureSubmap(register.registerIcon(modName + ":" + texturePath + "-r4"), 2, 2); + } + + @Override + protected IIcon getIcon(ICarvingVariation variation, Object cachedObject, int side, int meta) { + return V4.getIcon(variation, cachedObject, side, meta); + } + + @Override + protected IIcon getIcon(ICarvingVariation variation, Object cachedObject, IBlockAccess world, int x, int y, int z, int side, int meta) { + rand.setSeed(x + y + z + side); + rand.nextBoolean(); + int size = this == TextureType.R4 ? 2 : 3; + return ((TextureSubmap)cachedObject).getSubIcon(rand.nextInt(size), rand.nextInt(size)); + } + }, + NORMAL, + CUSTOM; + + private static final TextureType[] VALUES; + private static final CTM ctm = CTM.getInstance(); + private static final Random rand = new Random(); + private static final RenderBlocksCTM theRenderBlocksCTM = new RenderBlocksCTM(); + private static final RenderBlocksColumn theRenderBlocksColumn = new RenderBlocksColumn(); + + private String[] suffixes; + static { + VALUES = ArrayUtils.subarray(values(), 0, values().length - 1); + } + + private TextureType(String... suffixes) { + this.suffixes = suffixes.length == 0 ? new String[] { "" } : suffixes; + } + + public ISubmapManager createManagerFor(ICarvingVariation variation, String texturePath) { + return new SubmapManagerDefault(this, variation, texturePath); + } + + protected Object registerIcons(ICarvingVariation variation, String modName, String texturePath, IIconRegister register) { + return register.registerIcon(modName + ":" + texturePath); + } + + protected IIcon getIcon(ICarvingVariation variation, Object cachedObject, int side, int meta) { + return (IIcon) cachedObject; + } + + protected IIcon getIcon(ICarvingVariation variation, Object cachedObject, IBlockAccess world, int x, int y, int z, int side, int meta) { + return getIcon(variation, cachedObject, side, meta); + } + + protected RenderBlocks createRenderContext(RenderBlocks rendererOld, IBlockAccess world, Object cachedObject) { + return null; + } + + public static TextureType getTypeFor(CarvableHelper inst, String modid, String path) { + if (path == null) { + return CUSTOM; + } + for (TextureType t : VALUES) { + boolean matches = true; + for (String s : t.suffixes) { + if (!exists(modid, path, s.isEmpty() ? s : "-" + s)) { + matches = false; + } + } + if (matches) { + return t; + } + } + return CUSTOM; + } + + // This is ugly, but faster than class.getResource + private static boolean exists(String modid, String path, String postfix) { + ResourceLocation rl = new ResourceLocation(modid, "textures/blocks/" + path + postfix + ".png"); + try { + Minecraft.getMinecraft().getResourceManager().getAllResources(rl); + return true; + } catch (Throwable t) { + return false; + } + } + + private static class SubmapManagerDefault implements ISubmapManager { + + private TextureType type; + private ICarvingVariation variation; + private Object cachedObject; + private String texturePath; + + private SubmapManagerDefault(TextureType type, ICarvingVariation variation, String texturePath) { + this.type = type; + this.variation = variation; + this.texturePath = texturePath; + } + + @Override + public IIcon getIcon(int side, int meta) { + return type.getIcon(variation, cachedObject, side, meta); + } + + @Override + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { + return type.getIcon(variation, cachedObject, world, x, y, z, side, world.getBlockMetadata(x, y, z)); + } + + @Override + public void registerIcons(String modName, Block block, IIconRegister register) { + cachedObject = type.registerIcons(variation, modName, texturePath, register); + } + + @Override + public RenderBlocks createRenderContext(RenderBlocks rendererOld, IBlockAccess world) { + return type.createRenderContext(rendererOld, world, cachedObject); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/cricketcraft/chisel/api/rendering/package-info.java b/src/main/java/com/cricketcraft/chisel/api/rendering/package-info.java new file mode 100644 index 00000000..72861b94 --- /dev/null +++ b/src/main/java/com/cricketcraft/chisel/api/rendering/package-info.java @@ -0,0 +1,7 @@ +@API(apiVersion = ChiselAPIProps.VERSION, owner = "Chisel", provides = "ChiselAPI|Rendering") +package com.cricketcraft.chisel.api.rendering; + +import com.cricketcraft.chisel.api.ChiselAPIProps; + +import cpw.mods.fml.common.API; + diff --git a/src/main/java/com/cricketcraft/chisel/block/BlockCarvablePillar.java b/src/main/java/com/cricketcraft/chisel/block/BlockCarvablePillar.java index 1f7af17b..d014da95 100644 --- a/src/main/java/com/cricketcraft/chisel/block/BlockCarvablePillar.java +++ b/src/main/java/com/cricketcraft/chisel/block/BlockCarvablePillar.java @@ -37,13 +37,14 @@ public class BlockCarvablePillar extends BlockCarvable { var = carverHelper.infoList.get(metadata); else var = carverHelper.infoList.get(0); + return var.getSubmapManager().getIcon(0, metadata); // TODO this... - if (index >= 4) - return var.iconTop; - if (var.seamsCtmVert == null) - return var.icon; - return var.seamsCtmVert.getSubIcon(index % 2, index / 2); +// if (index >= 4) +// return var.iconTop; +// if (var.seamsCtmVert == null) +// return var.icon; +// return var.seamsCtmVert.getSubIcon(index % 2, index / 2); } } diff --git a/src/main/java/com/cricketcraft/chisel/carving/CarvableHelper.java b/src/main/java/com/cricketcraft/chisel/carving/CarvableHelper.java index 111b83e7..3544b0fa 100644 --- a/src/main/java/com/cricketcraft/chisel/carving/CarvableHelper.java +++ b/src/main/java/com/cricketcraft/chisel/carving/CarvableHelper.java @@ -4,91 +4,39 @@ import java.util.ArrayList; import java.util.List; import net.minecraft.block.Block; -import net.minecraft.block.BlockPane; import net.minecraft.block.material.Material; -import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; -import net.minecraft.util.ResourceLocation; import net.minecraft.world.IBlockAccess; import net.minecraftforge.oredict.OreDictionary; -import org.apache.commons.lang3.ArrayUtils; - import com.cricketcraft.chisel.Chisel; -import com.cricketcraft.chisel.api.carving.ICarvingVariation; import com.cricketcraft.chisel.api.carving.IVariationInfo; import com.cricketcraft.chisel.api.carving.VariationInfoBase; -import com.cricketcraft.chisel.api.client.CTM; -import com.cricketcraft.chisel.api.client.ISubmapManager; -import com.cricketcraft.chisel.api.client.TextureSubmap; +import com.cricketcraft.chisel.api.rendering.ISubmapManager; +import com.cricketcraft.chisel.api.rendering.TextureType; import com.cricketcraft.chisel.compat.fmp.FMPIMC; import com.cricketcraft.chisel.item.ItemCarvable; import com.cricketcraft.chisel.utils.GeneralClient; -import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.registry.GameRegistry; public class CarvableHelper { - public enum TextureType { - - // TODO decide if this is the correct way to go about it...then implement the abstract method - TOPSIDE("top", "side"), - TOPBOTSIDE("top", "bottom", "side"), - CTMV("ctmv", "top"), - CTMH("ctmh", "top"), - V9("v9"), - V4("v4"), - CTMX("", "ctm"), - R16("r16"), - R9("r9"), - R4("r4"), - NORMAL, - CUSTOM; - - private static final TextureType[] VALUES; - private String[] suffixes; - static { - VALUES = ArrayUtils.subarray(values(), 0, values().length - 1); - } - - private TextureType(String... suffixes) { - this.suffixes = suffixes.length == 0 ? new String[] { "" } : suffixes; - } - - public abstract ISubmapManager createManagerFor(ICarvingVariation variation); - - public static TextureType getTypeFor(CarvableHelper inst, String modid, String path) { - for (TextureType t : VALUES) { - boolean matches = true; - for (String s : t.suffixes) { - if (!inst.exists(modid, path, s.isEmpty() ? s : "-" + s)) { - matches = false; - } - } - if (matches) { - return t; - } - } - return CUSTOM; - } - } - private Block theBlock; + public ArrayList infoList = new ArrayList(); + IVariationInfo[] infoMap = new IVariationInfo[16]; + public boolean forbidChiseling = false; + public CarvableHelper(Block block) { this.theBlock = block; } - - private static CTM ctm = CTM.getInstance(); - - public ArrayList infoList = new ArrayList(); - IVariationInfo[] infoMap = new IVariationInfo[16]; - public boolean forbidChiseling = false; - public String blockName; + public void addVariation(String description, int metadata, ISubmapManager manager) { + addVariation(description, metadata, null, manager); + } public void addVariation(String description, int metadata, Block bb) { addVariation(description, metadata, null, bb, 0, Chisel.MOD_ID); @@ -135,11 +83,6 @@ public class CarvableHelper { if (infoList.size() >= 16) return; - if (blockName == null && block != null) - blockName = block.getLocalizedName(); - else if (blockName == null && description != null) - blockName = description; - CarvingVariation var = new CarvingVariation(theBlock, metadata, metadata); TextureType type = TextureType.getTypeFor(this, modid, texture); if (type == TextureType.CUSTOM && customManager == null) { @@ -150,7 +93,7 @@ public class CarvableHelper { if (customManager != null) { info = new VariationInfoBase(var, description, customManager); } else { - info = new VariationInfoBase(var, description, type.createManagerFor(var)); + info = new VariationInfoBase(var, description, type.createManagerFor(var, texture)); } // TODO handling for block texture override params @@ -159,82 +102,27 @@ public class CarvableHelper { infoMap[metadata] = info; } - // This is ugly, but faster than class.getResource - private boolean exists(String modid, String path, String postfix) { - ResourceLocation rl = new ResourceLocation(modid, "textures/blocks/" + path + postfix + ".png"); - try { - Minecraft.getMinecraft().getResourceManager().getAllResources(rl); - return true; - } catch (Throwable t) { - return false; - } - } public IVariationInfo getVariation(int metadata) { if (metadata < 0 || metadata > 15) metadata = 0; - IVariationInfo variation = infoMap[metadata]; - if (variation == null) + IVariationInfo info = infoMap[metadata]; + if (info == null) return null; - return variation; + return info; } public IIcon getIcon(int side, int metadata) { if (metadata < 0 || metadata > 15) metadata = 0; - IVariationInfo variation = infoMap[metadata]; - if (variation == null) + IVariationInfo info = infoMap[metadata]; + if (info == null) return GeneralClient.getMissingIcon(); - return variation.getSubmapManager().getIcon(side, metadata); - - /* - switch (variation.type) { - case NORMAL: - return variation.icon; - case TOPSIDE: - if (side == 0 || side == 1) - return variation.iconTop; - else - return variation.icon; - case TOPBOTSIDE: - if (side == 1) - return variation.iconTop; - else if (side == 0) - return variation.iconBot; - else - return variation.icon; - case CTMV: - if (side < 2) - return variation.iconTop; - else - return variation.seamsCtmVert.getSubIcon(0, 0); - case CTMH: - if (side < 2) - return variation.iconTop; - else - return variation.seamsCtmVert.getSubIcon(0, 0); - case V9: - return variation.variations9.getSubIcon(1, 1); - case V4: - return variation.variations9.getSubIcon(0, 0); - case CTMX: - return variation.icon; - case R16: - return variation.variations9.getSubIcon(1, 1); - case R9: - return variation.variations9.getSubIcon(1, 1); - case R4: - return variation.variations9.getSubIcon(0, 0); - case CUSTOM: - return variation.manager.getIcon(side, metadata); - } - - return GeneralClient.getMissingIcon(); - */ + return info.getSubmapManager().getIcon(side, metadata); } public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { @@ -243,117 +131,11 @@ public class CarvableHelper { if (metadata < 0 || metadata > 15) metadata = 0; - IVariationInfo variation = infoMap[metadata]; - if (variation == null) + IVariationInfo info = infoMap[metadata]; + if (info == null) return GeneralClient.getMissingIcon(); - return variation.getSubmapManager().getIcon(world, x, y, z, side); - - /* - switch (variation.type) { - case NORMAL: - case TOPSIDE: - case TOPBOTSIDE: - return getIcon(side, metadata); - case CTMV: { - if (side < 2) - return variation.iconTop; - - Block block = world.getBlock(x, y, z); - boolean topConnected = ctm.isConnected(world, x, y + 1, z, side, block, metadata); - boolean botConnected = ctm.isConnected(world, x, y - 1, z, side, block, metadata); - - if (topConnected && botConnected) - return variation.seamsCtmVert.getSubIcon(0, 1); - if (topConnected && !botConnected) - return variation.seamsCtmVert.getSubIcon(1, 1); - if (!topConnected && botConnected) - return variation.seamsCtmVert.getSubIcon(1, 0); - return variation.seamsCtmVert.getSubIcon(0, 0); - } - case CTMH: - if (side < 2) - return variation.iconTop; - - Block block = ctm.getBlockOrFacade(world, x, y, z, side); - - boolean p; - boolean n; - boolean reverse = side == 2 || side == 5; - - if (side < 4) { - p = ctm.isConnected(world, x - 1, y, z, side, block, metadata); - n = ctm.isConnected(world, x + 1, y, z, side, block, metadata); - } else { - p = ctm.isConnected(world, x, y, z - 1, side, block, metadata); - n = ctm.isConnected(world, x, y, z + 1, side, block, metadata); - } - - if (p && n) - return variation.seamsCtmVert.getSubIcon(1, 0); - else if (p) - return variation.seamsCtmVert.getSubIcon(reverse ? 0 : 1, 1); - else if (n) - return variation.seamsCtmVert.getSubIcon(reverse ? 0 : 1, 1); - return variation.seamsCtmVert.getSubIcon(0, 0); - case V9: - case V4: - int variationSize = (variation.type == TextureType.V9) ? 3 : 2; - - int xModulus = x % variationSize; - int zModulus = z % variationSize; - //This ensures that blocks placed near 0,0 or it's axis' do not misbehave - int textureX = (xModulus < 0) ? (xModulus + variationSize) : xModulus; - int textureZ = (zModulus < 0) ? (zModulus + variationSize) : zModulus; - //Always invert the y index - int textureY = (variationSize - (y % variationSize) - 1); - - if (side == 2 || side == 5) { - //For WEST, SOUTH reverse the indexes for both X and Z - textureX = (variationSize - textureX - 1); - textureZ = (variationSize - textureZ - 1); - } /*else if (side == 0) { - //For DOWN, reverse the indexes for only Z - textureZ = (variationSize - textureZ - 1); - }//*/ -/* - int index; - if (side == 0 || side == 1) { - // DOWN || UP - index = textureX + textureZ * variationSize; - } else if (side == 2 || side == 3) { - // NORTH || SOUTH - index = textureX + textureY * variationSize; - } else { - // WEST || EAST - index = textureZ + textureY * variationSize; - } - - return variation.variations9.getSubIcon(index % variationSize, index / variationSize); - case CTMX: - return variation.icon; - case R16: - case R9: - case R4: - - int indexRan = x + y + z; - if ((side == 2) || (side == 5)) { - indexRan = -indexRan; - } - while (indexRan < 0) { - indexRan = indexRan + 10000; - } - int size = variation.type == TextureType.V4 ? 2 : 3; - - // rand.setSeed(indexRan); // Broken - - return variation.variations9.getSubIcon(indexRan % size, indexRan / size); - case CUSTOM: - return variation.manager.getIcon(world, x, y, z, side); - } - - return GeneralClient.getMissingIcon(); - */ + return info.getSubmapManager().getIcon(world, x, y, z, side); } public void registerAll(Block block, String name) { @@ -398,81 +180,6 @@ public class CarvableHelper { for (IVariationInfo info : infoList) { info.getSubmapManager().registerIcons(modName, block, register); } - /* - if (info.block != null) { - info.block.registerBlockIcons(register); - - if (info.block instanceof BlockPane) { - info.icon = info.block.getBlockTextureFromSide(2); - info.iconTop = ((BlockPane) info.block).getBlockTextureFromSide(0); - info.iconBot = ((BlockPane) info.block).getBlockTextureFromSide(0); - - } else { - switch (info.type) { - case NORMAL: - info.icon = info.block.getIcon(2, info.blockMeta); - break; - case TOPSIDE: - info.icon = info.block.getIcon(2, info.blockMeta); - info.iconTop = info.block.getIcon(0, info.blockMeta); - break; - case TOPBOTSIDE: - info.icon = info.block.getIcon(2, info.blockMeta); - info.iconTop = info.block.getIcon(1, info.blockMeta); - info.iconBot = info.block.getIcon(0, info.blockMeta); - break; - default: - break; - } - } - } else { - switch (info.type) { - case NORMAL: - info.icon = register.registerIcon(modName + ":" + info.texture); - break; - case TOPSIDE: - info.icon = register.registerIcon(modName + ":" + info.texture + "-side"); - info.iconTop = register.registerIcon(modName + ":" + info.texture + "-top"); - break; - case TOPBOTSIDE: - info.icon = register.registerIcon(modName + ":" + info.texture + "-side"); - info.iconTop = register.registerIcon(modName + ":" + info.texture + "-top"); - info.iconBot = register.registerIcon(modName + ":" + info.texture + "-bottom"); - break; - case CTMV: - info.seamsCtmVert = new TextureSubmap(register.registerIcon(modName + ":" + info.texture + "-ctmv"), 2, 2); - info.iconTop = register.registerIcon(modName + ":" + info.texture + "-top"); - break; - case CTMH: - info.seamsCtmVert = new TextureSubmap(register.registerIcon(modName + ":" + info.texture + "-ctmh"), 2, 2); - info.iconTop = register.registerIcon(modName + ":" + info.texture + "-top"); - break; - case V9: - info.variations9 = new TextureSubmap(register.registerIcon(modName + ":" + info.texture + "-v9"), 3, 3); - break; - case V4: - info.variations9 = new TextureSubmap(register.registerIcon(modName + ":" + info.texture + "-v4"), 2, 2); - break; - case CTMX: - info.icon = register.registerIcon(modName + ":" + info.texture); - info.submap = new TextureSubmap(register.registerIcon(modName + ":" + info.texture + "-ctm"), 4, 4); - info.submapSmall = new TextureSubmap(info.icon, 2, 2); - break; - case R16: - info.variations9 = new TextureSubmap(register.registerIcon(modName + ":" + info.texture + "-r16"), 4, 4); - break; - case R9: - info.variations9 = new TextureSubmap(register.registerIcon(modName + ":" + info.texture + "-r9"), 3, 3); - break; - case R4: - info.variations9 = new TextureSubmap(register.registerIcon(modName + ":" + info.texture + "-r4"), 2, 2); - break; - case CUSTOM: - info.manager.registerIcons(modName, block, register); - } - } - } - */ } public void registerSubBlocks(Block block, CreativeTabs tabs, List list) { @@ -481,10 +188,6 @@ public class CarvableHelper { } } - public void setChiselBlockName(String name) { - blockName = name; - } - public void registerOre(String ore) { OreDictionary.registerOre(ore, infoList.get(0).getVariation().getBlock()); } diff --git a/src/main/java/com/cricketcraft/chisel/carving/CarvableVariation.java b/src/main/java/com/cricketcraft/chisel/carving/CarvableVariation.java index 99a0ef71..2713603d 100644 --- a/src/main/java/com/cricketcraft/chisel/carving/CarvableVariation.java +++ b/src/main/java/com/cricketcraft/chisel/carving/CarvableVariation.java @@ -4,9 +4,9 @@ import net.minecraft.block.Block; import net.minecraft.client.resources.I18n; import net.minecraft.util.IIcon; -import com.cricketcraft.chisel.api.client.ISubmapManager; -import com.cricketcraft.chisel.api.client.TextureSubmap; -import com.cricketcraft.chisel.carving.CarvableHelper.TextureType; +import com.cricketcraft.chisel.api.rendering.ISubmapManager; +import com.cricketcraft.chisel.api.rendering.TextureSubmap; +import com.cricketcraft.chisel.api.rendering.TextureType; public class CarvableVariation { diff --git a/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksCTM.java b/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksCTM.java index ad3bf595..21bfcf7c 100644 --- a/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksCTM.java +++ b/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksCTM.java @@ -1,7 +1,7 @@ package com.cricketcraft.chisel.client.render; -import com.cricketcraft.chisel.api.client.CTM; -import com.cricketcraft.chisel.api.client.TextureSubmap; +import com.cricketcraft.chisel.api.rendering.CTM; +import com.cricketcraft.chisel.api.rendering.TextureSubmap; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; @@ -67,8 +67,11 @@ public class RenderBlocksCTM extends RenderBlocks { inst.tessellator.setColorOpaque_F(inst.redCache[cacheID], inst.grnCache[cacheID], inst.bluCache[cacheID]); inst.tessellator.setBrightness(inst.lightingCache[cacheID]); } + double xDiff = inst.renderMaxX - inst.renderMinX; + double yDiff = inst.renderMaxY - inst.renderMinY; + double zDiff = inst.renderMaxZ - inst.renderMinZ; - inst.tessellator.addVertexWithUV(x, y, z, inst.uCache[cacheID], inst.vCache[cacheID]); + inst.tessellator.addVertexWithUV(inst.renderMinX + (x * xDiff), inst.renderMinY + (y * yDiff), inst.renderMinZ + (z * zDiff), inst.uCache[cacheID], inst.vCache[cacheID]); } } @@ -117,7 +120,7 @@ public class RenderBlocksCTM extends RenderBlocks { int blueBitChannel = 0; int sunlightBitChannel = 0; - RenderBlocksCTM() { + public RenderBlocksCTM() { super(); } @@ -128,9 +131,9 @@ public class RenderBlocksCTM extends RenderBlocks { float[] redCache = new float[4]; float[] grnCache = new float[4]; float[] bluCache = new float[4]; - TextureSubmap submap; - TextureSubmap submapSmall; - RenderBlocks rendererOld; + public TextureSubmap submap; + public TextureSubmap submapSmall; + public RenderBlocks rendererOld; int[][] lightmap = new int[3][3]; float[][] redmap = new float[3][3]; @@ -282,10 +285,10 @@ public class RenderBlocksCTM extends RenderBlocks { if (rendererOld != null && rendererOld.hasOverrideBlockTexture()) { IIcon i = rendererOld.overrideBlockTexture; - tessellator.addVertexWithUV(0.0, 1.0, 0.0, i.getMinU(), i.getMinV()); - tessellator.addVertexWithUV(0.0, 0.0, 0.0, i.getMinU(), i.getMaxV()); - tessellator.addVertexWithUV(0.0, 0.0, 1.0, i.getMaxU(), i.getMaxV()); - tessellator.addVertexWithUV(0.0, 1.0, 1.0, i.getMaxU(), i.getMinV()); + tessellator.addVertexWithUV(renderMinX, renderMaxY, renderMinZ, i.getMinU(), i.getMinV()); + tessellator.addVertexWithUV(renderMinX, renderMinY, renderMinZ, i.getMinU(), i.getMaxV()); + tessellator.addVertexWithUV(renderMinX, renderMinY, renderMaxZ, i.getMaxU(), i.getMaxV()); + tessellator.addVertexWithUV(renderMinX, renderMaxY, renderMaxZ, i.getMaxU(), i.getMinV()); } else { int tex[] = ctm.getSubmapIndices(blockAccess, bx, by, bz, 4); @@ -310,10 +313,10 @@ public class RenderBlocksCTM extends RenderBlocks { if (rendererOld != null && rendererOld.hasOverrideBlockTexture()) { IIcon i = rendererOld.overrideBlockTexture; - tessellator.addVertexWithUV(1.0, 1.0, 1.0, i.getMaxU(), i.getMinV()); - tessellator.addVertexWithUV(1.0, 0.0, 1.0, i.getMaxU(), i.getMaxV()); - tessellator.addVertexWithUV(1.0, 0.0, 0.0, i.getMinU(), i.getMaxV()); - tessellator.addVertexWithUV(1.0, 1.0, 0.0, i.getMinU(), i.getMinV()); + tessellator.addVertexWithUV(renderMaxX, renderMaxY, renderMaxZ, i.getMaxU(), i.getMinV()); + tessellator.addVertexWithUV(renderMaxX, renderMinY, renderMaxZ, i.getMaxU(), i.getMaxV()); + tessellator.addVertexWithUV(renderMaxX, renderMinY, renderMinZ, i.getMinU(), i.getMaxV()); + tessellator.addVertexWithUV(renderMaxX, renderMaxY, renderMinZ, i.getMinU(), i.getMinV()); } else { int tex[] = ctm.getSubmapIndices(blockAccess, bx, by, bz, 5); @@ -337,10 +340,10 @@ public class RenderBlocksCTM extends RenderBlocks { if (rendererOld != null && rendererOld.hasOverrideBlockTexture()) { IIcon i = rendererOld.overrideBlockTexture; - tessellator.addVertexWithUV(1.0, 1.0, 0.0, i.getMaxU(), i.getMinV()); - tessellator.addVertexWithUV(1.0, 0.0, 0.0, i.getMaxU(), i.getMaxV()); - tessellator.addVertexWithUV(0.0, 0.0, 0.0, i.getMinU(), i.getMaxV()); - tessellator.addVertexWithUV(0.0, 1.0, 0.0, i.getMinU(), i.getMinV()); + tessellator.addVertexWithUV(renderMaxX, renderMaxY, renderMinZ, i.getMaxU(), i.getMinV()); + tessellator.addVertexWithUV(renderMaxX, renderMinY, renderMinZ, i.getMaxU(), i.getMaxV()); + tessellator.addVertexWithUV(renderMinX, renderMinY, renderMinZ, i.getMinU(), i.getMaxV()); + tessellator.addVertexWithUV(renderMinX, renderMaxY, renderMinZ, i.getMinU(), i.getMinV()); } else { int tex[] = ctm.getSubmapIndices(blockAccess, bx, by, bz, 2); @@ -364,10 +367,10 @@ public class RenderBlocksCTM extends RenderBlocks { if (rendererOld != null && rendererOld.hasOverrideBlockTexture()) { IIcon i = rendererOld.overrideBlockTexture; - tessellator.addVertexWithUV(0.0, 1.0, 1.0, i.getMinU(), i.getMinV()); - tessellator.addVertexWithUV(0.0, 0.0, 1.0, i.getMinU(), i.getMaxV()); - tessellator.addVertexWithUV(1.0, 0.0, 1.0, i.getMaxU(), i.getMaxV()); - tessellator.addVertexWithUV(1.0, 1.0, 1.0, i.getMaxU(), i.getMinV()); + tessellator.addVertexWithUV(renderMinX, renderMaxY, renderMaxZ, i.getMinU(), i.getMinV()); + tessellator.addVertexWithUV(renderMinX, renderMinY, renderMaxZ, i.getMinU(), i.getMaxV()); + tessellator.addVertexWithUV(renderMaxX, renderMinY, renderMaxZ, i.getMaxU(), i.getMaxV()); + tessellator.addVertexWithUV(renderMaxX, renderMaxY, renderMaxZ, i.getMaxU(), i.getMinV()); } else { int tex[] = ctm.getSubmapIndices(blockAccess, bx, by, bz, 3); @@ -391,10 +394,10 @@ public class RenderBlocksCTM extends RenderBlocks { if (rendererOld != null && rendererOld.hasOverrideBlockTexture()) { IIcon i = rendererOld.overrideBlockTexture; - tessellator.addVertexWithUV(0.0, 0.0, 1.0, i.getMinU(), i.getMaxV()); - tessellator.addVertexWithUV(0.0, 0.0, 0.0, i.getMinU(), i.getMinV()); - tessellator.addVertexWithUV(1.0, 0.0, 0.0, i.getMaxU(), i.getMinV()); - tessellator.addVertexWithUV(1.0, 0.0, 1.0, i.getMaxU(), i.getMaxV()); + tessellator.addVertexWithUV(renderMinX, renderMinY, renderMaxZ, i.getMinU(), i.getMaxV()); + tessellator.addVertexWithUV(renderMinX, renderMinY, renderMinZ, i.getMinU(), i.getMinV()); + tessellator.addVertexWithUV(renderMaxX, renderMinY, renderMinZ, i.getMaxU(), i.getMinV()); + tessellator.addVertexWithUV(renderMaxX, renderMinY, renderMaxZ, i.getMaxU(), i.getMaxV()); } else { int tex[] = ctm.getSubmapIndices(blockAccess, bx, by, bz, 0); @@ -418,10 +421,10 @@ public class RenderBlocksCTM extends RenderBlocks { if (rendererOld != null && rendererOld.hasOverrideBlockTexture()) { IIcon i = rendererOld.overrideBlockTexture; - tessellator.addVertexWithUV(0.0, 1.0, 0.0, i.getMinU(), i.getMinV()); - tessellator.addVertexWithUV(0.0, 1.0, 1.0, i.getMinU(), i.getMaxV()); - tessellator.addVertexWithUV(1.0, 1.0, 1.0, i.getMaxU(), i.getMaxV()); - tessellator.addVertexWithUV(1.0, 1.0, 0.0, i.getMaxU(), i.getMinV()); + tessellator.addVertexWithUV(renderMinX, renderMaxY, renderMinZ, i.getMinU(), i.getMinV()); + tessellator.addVertexWithUV(renderMinX, renderMaxY, renderMaxZ, i.getMinU(), i.getMaxV()); + tessellator.addVertexWithUV(renderMaxX, renderMaxY, renderMaxZ, i.getMaxU(), i.getMaxV()); + tessellator.addVertexWithUV(renderMaxX, renderMaxY, renderMinZ, i.getMaxU(), i.getMinV()); } else { int tex[] = ctm.getSubmapIndices(blockAccess, bx, by, bz, 1); diff --git a/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksCTMCarpet.java b/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksCTMCarpet.java index 379ecb28..f7b5bace 100644 --- a/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksCTMCarpet.java +++ b/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksCTMCarpet.java @@ -5,7 +5,7 @@ import net.minecraft.util.IIcon; public class RenderBlocksCTMCarpet extends RenderBlocksCTM { - RenderBlocksCTMCarpet() { + public RenderBlocksCTMCarpet() { super(); } diff --git a/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksCTMFullbright.java b/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksCTMFullbright.java index 6c3bbd0d..d3aa1a69 100644 --- a/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksCTMFullbright.java +++ b/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksCTMFullbright.java @@ -1,7 +1,7 @@ package com.cricketcraft.chisel.client.render; -import com.cricketcraft.chisel.api.client.CTM; -import com.cricketcraft.chisel.api.client.TextureSubmap; +import com.cricketcraft.chisel.api.rendering.CTM; +import com.cricketcraft.chisel.api.rendering.TextureSubmap; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; diff --git a/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksColumn.java b/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksColumn.java index 77cfcb46..72b7fb0b 100644 --- a/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksColumn.java +++ b/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksColumn.java @@ -1,7 +1,7 @@ package com.cricketcraft.chisel.client.render; -import com.cricketcraft.chisel.api.client.CTM; -import com.cricketcraft.chisel.api.client.TextureSubmap; +import com.cricketcraft.chisel.api.rendering.CTM; +import com.cricketcraft.chisel.api.rendering.TextureSubmap; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; @@ -10,12 +10,13 @@ import net.minecraft.world.IBlockAccess; public class RenderBlocksColumn extends RenderBlocks { - TextureSubmap submap; - IIcon iconTop; - IIcon sides[] = new IIcon[6]; - CTM ctm = CTM.getInstance(); + public TextureSubmap submap; + public IIcon iconTop; + + private IIcon sides[] = new IIcon[6]; + private CTM ctm = CTM.getInstance(); - RenderBlocksColumn() { + public RenderBlocksColumn() { super(); } diff --git a/src/main/java/com/cricketcraft/chisel/client/render/RendererCTM.java b/src/main/java/com/cricketcraft/chisel/client/render/RendererCTM.java index 8f980c88..fd12c3cc 100644 --- a/src/main/java/com/cricketcraft/chisel/client/render/RendererCTM.java +++ b/src/main/java/com/cricketcraft/chisel/client/render/RendererCTM.java @@ -9,7 +9,6 @@ import org.lwjgl.opengl.GL11; import com.cricketcraft.chisel.Chisel; import com.cricketcraft.chisel.api.ICarvable; import com.cricketcraft.chisel.api.carving.IVariationInfo; -import com.cricketcraft.chisel.carving.CarvableHelper.TextureType; import com.cricketcraft.chisel.utils.Drawing; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; @@ -38,39 +37,15 @@ public class RendererCTM implements ISimpleBlockRenderingHandler { int meta = world.getBlockMetadata(x, y, z); IVariationInfo var = ((ICarvable) block).getVariation(world, x, y, z, meta); - - if (rendererOld.hasOverrideBlockTexture()) { - // breaking anim - rendererOld.renderStandardBlock(block, x, y, z); - return true; + + if (!rendererOld.hasOverrideBlockTexture() && var != null) { + RenderBlocks rb = var.getSubmapManager().createRenderContext(rendererOld, world); + if (rb != null) { + return rb.renderStandardBlock(block, x, y, z); + } } - switch (var == null ? TextureType.NORMAL : var.type) { - case CTMX: - rendererCTM.blockAccess = world; - rendererCTM.renderMaxX = 1.0; - rendererCTM.renderMaxY = 1.0; - rendererCTM.renderMaxZ = 1.0; - - rendererCTM.submap = var.submap; - rendererCTM.submapSmall = var.submapSmall; - - rendererCTM.rendererOld = rendererOld; - - return rendererCTM.renderStandardBlock(block, x, y, z); - case CTMV: - rendererColumn.blockAccess = world; - rendererColumn.renderMaxX = 1.0; - rendererColumn.renderMaxY = 1.0; - rendererColumn.renderMaxZ = 1.0; - - rendererColumn.submap = var.seamsCtmVert; - rendererColumn.iconTop = var.iconTop; - - return rendererColumn.renderStandardBlock(block, x, y, z); - default: - return rendererOld.renderStandardBlock(block, x, y, z); - } + return rendererOld.renderStandardBlock(block, x, y, z) || rendererOld.hasOverrideBlockTexture(); } @Override diff --git a/src/main/java/com/cricketcraft/chisel/client/render/RendererCTMFullbright.java b/src/main/java/com/cricketcraft/chisel/client/render/RendererCTMFullbright.java index 742fa0fb..ddc79525 100644 --- a/src/main/java/com/cricketcraft/chisel/client/render/RendererCTMFullbright.java +++ b/src/main/java/com/cricketcraft/chisel/client/render/RendererCTMFullbright.java @@ -8,7 +8,8 @@ import org.lwjgl.opengl.GL11; import com.cricketcraft.chisel.Chisel; import com.cricketcraft.chisel.api.ICarvable; -import com.cricketcraft.chisel.carving.CarvableHelper.TextureType; +import com.cricketcraft.chisel.api.carving.IVariationInfo; +import com.cricketcraft.chisel.api.rendering.TextureType; import com.cricketcraft.chisel.carving.CarvableVariation; import com.cricketcraft.chisel.utils.Drawing; @@ -34,27 +35,29 @@ public class RendererCTMFullbright implements ISimpleBlockRenderingHandler { GL11.glTranslatef(0.5F, 0.5F, 0.5F); } + // TODO this needs to go...amalgamate into RendererCTM @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks rendererOld) { - int meta = world.getBlockMetadata(x, y, z); - - CarvableVariation var = ((ICarvable) block).getVariation(world, x, y, z, meta); - - if (var != null && var.type == TextureType.CTMX) { - rendererCTMNoLight.blockAccess = world; - rendererCTMNoLight.renderMaxX = 1.0; - rendererCTMNoLight.renderMaxY = 1.0; - rendererCTMNoLight.renderMaxZ = 1.0; - - rendererCTMNoLight.submap = var.submap; - rendererCTMNoLight.submapSmall = var.submapSmall; - - rendererCTMNoLight.rendererOld = rendererOld; - - return rendererCTMNoLight.renderStandardBlock(block, x, y, z); - } else { - return rendererOld.renderStandardBlock(block, x, y, z); - } +// int meta = world.getBlockMetadata(x, y, z); +// +// IVariationInfo var = ((ICarvable) block).getVariation(world, x, y, z, meta); +// +// if (var != null && var.getType() == TextureType.CTMX) { +// rendererCTMNoLight.blockAccess = world; +// rendererCTMNoLight.renderMaxX = 1.0; +// rendererCTMNoLight.renderMaxY = 1.0; +// rendererCTMNoLight.renderMaxZ = 1.0; +// +// rendererCTMNoLight.submap = var.submap; +// rendererCTMNoLight.submapSmall = var.submapSmall; +// +// rendererCTMNoLight.rendererOld = rendererOld; +// +// return rendererCTMNoLight.renderStandardBlock(block, x, y, z); +// } else { +// return rendererOld.renderStandardBlock(block, x, y, z); +// } + return rendererOld.renderStandardBlock(block, x, y, z); } @Override diff --git a/src/main/java/com/cricketcraft/chisel/client/render/RendererPillar.java b/src/main/java/com/cricketcraft/chisel/client/render/RendererPillar.java index cb5a30b8..836d926e 100644 --- a/src/main/java/com/cricketcraft/chisel/client/render/RendererPillar.java +++ b/src/main/java/com/cricketcraft/chisel/client/render/RendererPillar.java @@ -6,8 +6,8 @@ import net.minecraft.world.IBlockAccess; import org.lwjgl.opengl.GL11; +import com.cricketcraft.chisel.api.rendering.TextureType; import com.cricketcraft.chisel.block.BlockCarvablePillar; -import com.cricketcraft.chisel.carving.CarvableHelper.TextureType; import com.cricketcraft.chisel.utils.Drawing; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; @@ -39,6 +39,7 @@ public class RendererPillar implements ISimpleBlockRenderingHandler { } + // TODO this is a hardcoded mess...icon decisions should be left to the ISubmapManager, not here @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block blck, int modelId, RenderBlocks renderer) { if (!(blck instanceof BlockCarvablePillar)) @@ -52,7 +53,7 @@ public class RendererPillar implements ISimpleBlockRenderingHandler { if (metadata >= block.carverHelper.infoList.size()) { metadata = 0; } else { - if (block.carverHelper.infoList.get(metadata).type != TextureType.CTMV) { + if (block.carverHelper.infoList.get(metadata).getType() != TextureType.CTMV) { block.sides[0] = block.carverHelper.getIcon(0, metadata); block.sides[1] = block.carverHelper.getIcon(1, metadata); block.sides[2] = block.carverHelper.getIcon(2, metadata); diff --git a/src/main/java/com/cricketcraft/chisel/client/render/SubmapManagerCarpetFloor.java b/src/main/java/com/cricketcraft/chisel/client/render/SubmapManagerCarpetFloor.java new file mode 100644 index 00000000..792ac785 --- /dev/null +++ b/src/main/java/com/cricketcraft/chisel/client/render/SubmapManagerCarpetFloor.java @@ -0,0 +1,55 @@ +package com.cricketcraft.chisel.client.render; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; + +import com.cricketcraft.chisel.api.rendering.ISubmapManager; +import com.cricketcraft.chisel.api.rendering.TextureSubmap; + + +public class SubmapManagerCarpetFloor implements ISubmapManager { + + private static RenderBlocksCTMCarpet rb = new RenderBlocksCTMCarpet(); + + private TextureSubmap submap; + private TextureSubmap submapSmall; + private String color; + + public SubmapManagerCarpetFloor(String color) { + this.color = color; + } + + @Override + public IIcon getIcon(int side, int meta) { + return submapSmall.getBaseIcon(); + } + + @Override + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { + return getIcon(side, world.getBlockMetadata(x, y, z)); + } + + @Override + public void registerIcons(String modName, Block block, IIconRegister register) { + String path = modName + ":carpet/" + color; + submap = new TextureSubmap(register.registerIcon(path + "-ctm"), 4, 4); + submapSmall = new TextureSubmap(register.registerIcon(path), 2, 2); + } + + @Override + public RenderBlocks createRenderContext(RenderBlocks rendererOld, IBlockAccess world) { + rb.blockAccess = world; + rb.renderMaxX = 1.0; + rb.renderMaxY = 1f / 16f; + rb.renderMaxZ = 1.0; + + rb.submap = submap; + rb.submapSmall = submapSmall; + + rb.rendererOld = rendererOld; + return rb; + } +} diff --git a/src/main/java/com/cricketcraft/chisel/client/render/SubmapManagerFakeController.java b/src/main/java/com/cricketcraft/chisel/client/render/SubmapManagerFakeController.java index 428f0fd4..4950c799 100644 --- a/src/main/java/com/cricketcraft/chisel/client/render/SubmapManagerFakeController.java +++ b/src/main/java/com/cricketcraft/chisel/client/render/SubmapManagerFakeController.java @@ -1,16 +1,17 @@ package com.cricketcraft.chisel.client.render; import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; -import com.cricketcraft.chisel.api.client.CTM; -import com.cricketcraft.chisel.api.client.ISubmapManager; -import com.cricketcraft.chisel.api.client.TextureSubmap; +import com.cricketcraft.chisel.api.rendering.CTM; +import com.cricketcraft.chisel.api.rendering.ISubmapManager; +import com.cricketcraft.chisel.api.rendering.TextureSubmap; import com.cricketcraft.chisel.init.ChiselBlocks; -import static com.cricketcraft.chisel.api.client.Dir.*; +import static com.cricketcraft.chisel.api.rendering.Dir.*; public class SubmapManagerFakeController implements ISubmapManager { @@ -44,4 +45,9 @@ public class SubmapManagerFakeController implements ISubmapManager { public void registerIcons(String modName, Block block, IIconRegister register) { map = new TextureSubmap(register.registerIcon(modName + ":futura/WIP/controllerWIP-ctm"), 2, 2); } + + @Override + public RenderBlocks createRenderContext(RenderBlocks rendererOld, IBlockAccess world) { + return rendererOld; + } } diff --git a/src/main/java/com/cricketcraft/chisel/config/Configurations.java b/src/main/java/com/cricketcraft/chisel/config/Configurations.java index 58aa169a..e502c2b9 100644 --- a/src/main/java/com/cricketcraft/chisel/config/Configurations.java +++ b/src/main/java/com/cricketcraft/chisel/config/Configurations.java @@ -2,7 +2,7 @@ package com.cricketcraft.chisel.config; import com.cricketcraft.chisel.Chisel; import com.cricketcraft.chisel.Features; -import com.cricketcraft.chisel.api.client.CTM; +import com.cricketcraft.chisel.api.rendering.CTM; import net.minecraft.item.ItemDye; import net.minecraftforge.common.config.Configuration;