[1.7.10] Соединяющаяся текстура

5,018
47
783
Привет! Меня попросили некоторые субъекты, типо когда закончишь с текстурой, выложи код.Методом научиного ты ка сталов понятно, что аккуратно с помощью массива и цикла тут сделать не удастся, поэтому пришлось поиндусокодить. Если кто знает как еще - пишите, я с удовольствием исправлю! Ну, я боюсь что вы испугаетесь немного, а кто то ужаснется, но вот:
Код:
public class PolishedMarsStone extends Block {
 //my super Hindu code(Мой суперский индусский код)
//К сожалению, опытным путем было выяснено, что цикл и массив тут не подходят.

public static IIcon iconDown1,iconDown2,iconDown3,iconDown4,
iconDownA1,iconDownA2,iconDownA3,iconDownA4,iconDownW1,iconDownW2,iconDownFull,iconDownB1,iconDownB2,iconDownB3,iconDownB4;
public IIcon iconDown;




public PolishedMarsStone() {
super(Material.rock);
this.setHardness(10F);
this.setResistance(1F);
this.setCreativeTab(SpaceAdvanced.tabMainSA);
this.setBlockName("PolishedMarsStone");
this.setHarvestLevel("pickaxe", 1);
}

@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconReg)
{
this.iconDownFull = iconReg.registerIcon(SpaceAdvanced.MODID + ":iconDownFull");
this.iconDown = iconReg.registerIcon(SpaceAdvanced.MODID + ":iconDown");
this.iconDown1 = iconReg.registerIcon(SpaceAdvanced.MODID + ":iconDown1");
this.iconDown2 = iconReg.registerIcon(SpaceAdvanced.MODID + ":iconDown2");
this.iconDown3 = iconReg.registerIcon(SpaceAdvanced.MODID + ":iconDown3");
this.iconDown4 = iconReg.registerIcon(SpaceAdvanced.MODID + ":iconDown4");
this.iconDownA1 = iconReg.registerIcon(SpaceAdvanced.MODID + ":iconDownA1");
this.iconDownA2 = iconReg.registerIcon(SpaceAdvanced.MODID + ":iconDownA2");
this.iconDownA3 = iconReg.registerIcon(SpaceAdvanced.MODID + ":iconDownA3");
this.iconDownA4 = iconReg.registerIcon(SpaceAdvanced.MODID + ":iconDownA4");
this.iconDownB1 = iconReg.registerIcon(SpaceAdvanced.MODID + ":iconDownB1");
this.iconDownB2 = iconReg.registerIcon(SpaceAdvanced.MODID + ":iconDownB2");
this.iconDownB3 = iconReg.registerIcon(SpaceAdvanced.MODID + ":iconDownB3");
this.iconDownB4 = iconReg.registerIcon(SpaceAdvanced.MODID + ":iconDownB4");
this.iconDownW1 = iconReg.registerIcon(SpaceAdvanced.MODID + ":iconDownW1");
this.iconDownW2 = iconReg.registerIcon(SpaceAdvanced.MODID + ":iconDownW2");


}
@Override
public IIcon getIcon(int side, int meta) {

if(side == 0) return this.iconDown;
if(side == 1) return this.iconDown;
if(side == 2) return this.iconDown;
if(side == 3) return this.iconDown;
if(side == 4) return this.iconDown;
if(side == 5) return this.iconDown;
return this.iconDown;
}



@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)
{

//Центр(Center)
if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone && world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone 
&& world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone && world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 0) return this.iconDownFull;
}
//x+1 and z-1 and x - 1
if (world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone && world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone
&& world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 0) return this.iconDownB4;
}
//x+1 and z+1 and x - 1
if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone && world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone
&& world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 0) return this.iconDownB2;
}
//z+1 and x+1 and z - 1
if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone && world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone
&& world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 0) return this.iconDownB1;
}
//z+1 and x-1 and z - 1
if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone && world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone
&& world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 0) return this.iconDownB3;
}

//x+1 and z+1
if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone && world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 0) return this.iconDownA3;
}
//x-1 and z-1
if (world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone && world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 0) return this.iconDownA1;
}
//x-1 and z+1
if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone && world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 0) return this.iconDownA4;
}
//x+1 and z-1
if (world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone && world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 0) return this.iconDownA2;
}


if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone && world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone ){
if(side == 0) return this.iconDownW2;
}
if (world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone && world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 0) return this.iconDownW1;
}
if (world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 0) return this.iconDown1;
}
if (world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 0) return this.iconDown3;
}
if (world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone){
if(side == 0) return this.iconDown2;
}
if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone){
if(side == 0) return this.iconDown4;
}
if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone){
if(side == 0) return this.iconDown4;
}


if(side == 0) return this.iconDown;


//Центр(Center)
if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone && world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone 
&& world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone && world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 1) return this.iconDownFull;
}
//x+1 and z-1 and x - 1
if (world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone && world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone
&& world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 1) return this.iconDownB4;
}
//x+1 and z+1 and x - 1
if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone && world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone
&& world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 1) return this.iconDownB2;
}
//z+1 and x+1 and z - 1
if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone && world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone
&& world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 1) return this.iconDownB1;
}
//z+1 and x-1 and z - 1
if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone && world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone
&& world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 1) return this.iconDownB3;
}

//x+1 and z+1
if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone && world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 1) return this.iconDownA3;
}
//x-1 and z-1
if (world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone && world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 1) return this.iconDownA1;
}
//x-1 and z+1
if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone && world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 1) return this.iconDownA4;
}
//x+1 and z-1
if (world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone && world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 1) return this.iconDownA2;
}


if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone && world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone ){
if(side == 1) return this.iconDownW2;
}
if (world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone && world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 1) return this.iconDownW1;
}
if (world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 1) return this.iconDown1;
}
if (world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 1) return this.iconDown3;
}
if (world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone){
if(side == 1) return this.iconDown2;
}
if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone){
if(side == 1) return this.iconDown4;
}


if(side == 1) return this.iconDown;





if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone && world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone ){
if(side == 2) return this.iconDownW2;
}
if (world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone && world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 2) return this.iconDownW1;
}
if (world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 2) return this.iconDown3;//1
}
if (world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 2) return this.iconDown1;
}
if (world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone){
if(side == 2) return this.iconDown2;
}
if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone){
if(side == 2) return this.iconDown4;
}
if(side == 2) return this.iconDown;
if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone && world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone ){
if(side == 3) return this.iconDownW2;
}
if (world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone && world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 3) return this.iconDownW1;
}
if (world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 3) return this.iconDown1;//1
}
if (world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 3) return this.iconDown3;
}
if (world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone){
if(side == 3) return this.iconDown2;
}
if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone){
if(side == 3) return this.iconDown4;
}
if(side == 3) return this.iconDown;

if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone && world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone ){
if(side == 4) return this.iconDownW1;
}
if (world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone && world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 4) return this.iconDownW2;
}
if (world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 4) return this.iconDown4;//1
}
if (world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 4) return this.iconDown3;
}
if (world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone){
if(side == 4) return this.iconDown1;
}
if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone){
if(side == 4) return this.iconDown3;
}
if(side == 4) return this.iconDown;


if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone && world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone ){
if(side == 5) return this.iconDownW1;
}
if (world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone && world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 5) return this.iconDownW2;
}
if (world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 5) return this.iconDown3;//1
}
if (world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 5) return this.iconDown4;
}
if (world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone){
if(side == 5) return this.iconDown3;
}
if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone){
if(side == 5) return this.iconDown1;
}
if(side == 5) return this.iconDown;


return this.iconDown;

}
}
Однако код не совсем доделан, ибо по "y" он никак друг с другом не взаимодействует. Но я думаю принцип работы понятен.Пользуемся!
В итоге мы получаем -->
9e2ffab0dd5923f5582f0511da046118.png
 
2,505
81
397
Код:
@Override
public IIcon getIcon(int side, int meta) {
    if(side == 0) return this.iconDown;
    if(side == 1) return this.iconDown;
    if(side == 2) return this.iconDown;
    if(side == 3) return this.iconDown;
    if(side == 4) return this.iconDown;
    if(side == 5) return this.iconDown;
    return this.iconDown;
}
Да это же гениально!
 
5,018
47
783
Dahaka написал(а):
Код:
@Override
public IIcon getIcon(int side, int meta) {
    if(side == 0) return this.iconDown;
    if(side == 1) return this.iconDown;
    if(side == 2) return this.iconDown;
    if(side == 3) return this.iconDown;
    if(side == 4) return this.iconDown;
    if(side == 5) return this.iconDown;
    return this.iconDown;
}
Да это же гениально!

Ага. Я же сказал, это говняный индусокод. Но зато работает, и лучше не трогать :)
Да лан, шутка. Будет время, буду как следует разбираться
 
2,505
81
397
Не надо по сто раз писать world.getBlock(x, y, z + 1). Лучше 1 раз достать блок и использовать его.
 
Есть другой способ сконнектить текстуры (все на картинке). Вот только я совсем не разбираюсь в рендере и LWJGL, так что решил просто поделиться своей идеей, мб кто-нибудь попробует так сделать.

8c8bf8d6959b.png
 
3,005
192
592
GreenBudgie :D написал(а):
Есть другой способ сконнектить текстуры (все на картинке). Вот только я совсем не разбираюсь в рендере и LWJGL, так что решил просто поделиться своей идеей, мб кто-нибудь попробует так сделать.

Ну а собственно, если людям не нужно черную полоску в виде контура, а нужно серобуромалиновую?
 

CumingSoon

Местный стендапер
1,634
12
269
данное решение практичное только если текстура меняться не будет
 
5,018
47
783
Все практично. Ctrl + C Ctrl + V , заменил имена и готово. Это если лень абстрактый класс из этого делать.
 

CumingSoon

Местный стендапер
1,634
12
269
тогда этим же способом зарендери изображение отличное от текстуры блоков (допустим 3х3 блоков- появляется картина)
 
5,018
47
783
Изи. Берешь за основу центральный блок, чекаешь блоки вокруг, если окей, накладываешь на каждый блок кусок этой большой картины 3на3
 
Это интересно. Как оно реализовано в моде Chisel? Там полно текстур, которые соединяются во всех позициях.
 
5,018
47
783
Azrail Tesla написал(а):
Это интересно. Как оно реализовано в моде Chisel? Там полно текстур, которые соединяются во всех позициях.

Там своя система. Она реализована в виде либы CTM, ее даже можно скачать отдельно
https://github.com/Chisel-Team/CTMLib/wiki/Standard-CTM-Format
 
Maxik001 написал(а):
Azrail Tesla написал(а):
Это интересно. Как оно реализовано в моде Chisel? Там полно текстур, которые соединяются во всех позициях.

Там своя система. Она реализована в виде либы CTM, ее даже можно скачать отдельно
https://github.com/Chisel-Team/CTMLib/wiki/Standard-CTM-Format

Мне дико нравится эта система. Надо будет реализовать ее в своих задумках, Я большой поклонник мода Чизель. Особенно буду кайфовать, когда свой набор текстур на этот мод дорисую. Хех.
 
Сверху