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, TextureSubmap, TextureSubmap> data = (Triple, TextureSubmap, TextureSubmap>) 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;