Фонарик

Скорее всего этот вопрос уже задавали.
Но я его не нашел.
Мне нужно сделать фонарик.
Я понимаю что нужно спавнить светящийся блок туда куда смотрит игрок.
Но как мне это сделать я не знаю
И нужно ли создавать отдельный блок "света" для этого.
Вот так вот.
Направьте меня на путь истинный.:silly:
 
Хм, идея кстати хорошая, спавнить невидимый светящийся блок там, куда смотрит игрок. Вот мне бы тоже хотелось понять, как это сделать можно. У меня есть почти нормальные исходники Мод на фонарик (The Flash Light Mod) Правда они не очень хорошо работают, да и вырезать их нужно из остальной части мода (ненужных вещей и т.д) Смотрю и понимаю, что они так же спавнят этот блок, но файлов тут действительно много...
[merge_posts_bbcode]Добавлено: 21.11.2014 20:00:21[/merge_posts_bbcode]

Могу кинуть файлы относящиеся к фонарику, может ты поймёшь и ещё, такой тогда некий уговор, если ты поймёшь как использовать их нормально можно, то ты и мне чтобы потом показал.
 
Знаю многие делаю фонарик и он светит вокруг игрока, как в моде Dynamic Light.
Но как по мне это не есть хорошо.
 
lordraider написал(а):
Знаю многие делаю фонарик и он светит вокруг игрока, как в моде Dynamic Light.
Но как по мне это не есть хорошо.
Мне бы и это тоже интересно было, например сделать зажигалку которая светится около игрока при активации...
[merge_posts_bbcode]Добавлено: 21.11.2014 20:03:29[/merge_posts_bbcode]

NATALI написал(а):
lordraider написал(а):
Знаю многие делаю фонарик и он светит вокруг игрока, как в моде Dynamic Light.
Но как по мне это не есть хорошо.
Мне это тоже интересно, например сделать зажигалку которая светится около игрока при активации...
 
Конечно, взаимопомощь это хорошо.
Да и не хотелось бы портить о себе мнение:silly:
 
Из тех исходников я понял кое что.
Вот этот код
Код:
public static void tickFlashLight(ItemStack i, World w, EntityPlayer e, boolean par5) {
      if(i.getTagCompound() == null) {
         i.setTagCompound(new NBTTagCompound());
      }

      if(!par5) {
         i.getTagCompound().setBoolean("on", false);
      } else {
         if(i.getTagCompound().getInteger("Charge") > 0 && i.getTagCompound().getBoolean("on")) {
            i.getTagCompound().setInteger("Charge", i.getTagCompound().getInteger("Charge") - 1);
         }

         if(i.getTagCompound().getInteger("Charge") == 0) {
            i.getTagCompound().setBoolean("on", false);
         }

         if(!w.isRemote && i.getTagCompound().getBoolean("on")) {
            Vec3 vec3 = w.getWorldVec3Pool().getVecFromPool(e.posX, e.posY + (double)e.getEyeHeight(), e.posZ);
            /*
             * Здесь обозначается дальность света фонаря, значения 10.0D etc.;
             */
            Vec3 vec31 = w.getWorldVec3Pool().getVecFromPool(e.posX + e.getLookVec().xCoord * 10.0D, e.posY + e.getLookVec().yCoord * 10.0D + (double)e.getEyeHeight(), e.posZ + e.getLookVec().zCoord * 10.0D);
            MovingObjectPosition b = w.rayTraceBlocks_do_do(vec3, vec31, true, false);
            if(b != null) {
               int side = b.sideHit;
               int x = b.blockX;
               int y = b.blockY;
               int z = b.blockZ;
               if(w.getBlockId(x, y, z) == 3899) {
                  BlockLightTile t = (BlockLightTile)w.getBlockTileEntity(x, y, z);
                  if(t != null) {
                     t.timer = 0;
                  }
               } else {
                  if(side == 1) {
                     if(w.getBlockId(x, y + 1, z) == 31) {
                        if(w.getBlockId(x, y + 2, z) == 0) {
                           w.setBlock(x, y + 2, z, 3899);
                        }

                        return;
                     }

                     if(w.getBlockId(x, y + 1, z) == 0) {
                        w.setBlock(x, y + 1, z, 3899);
                     } else if(w.getBlockId(-((int)(e.getLookVec().xCoord * 1.5D)) + x, y + 1, -((int)(e.getLookVec().zCoord * 1.5D)) + z) == 0) {
                        w.setBlock(-((int)(e.getLookVec().xCoord * 1.5D)) + x, y + 1, -((int)(e.getLookVec().zCoord * 1.5D)) + z, 3899);
                     }

                     return;
                  }

                  if(side == 0) {
                     if(w.getBlockId(x, y - 1, z) == 0) {
                        w.setBlock(x, y - 1, z, 3899);
                     } else if(w.getBlockId(-((int)(e.getLookVec().xCoord * 1.5D)) + x, y - 1, -((int)(e.getLookVec().zCoord * 1.5D)) + z) == 0) {
                        w.setBlock(-((int)(e.getLookVec().xCoord * 1.5D)) + x, y - 1, -((int)(e.getLookVec().zCoord * 1.5D)) + z, 3899);
                     }

                     return;
                  }

                  if(side == 4) {
                     if(w.getBlockId(x - 1, y, z) == 0) {
                        w.setBlock(x - 1, y, z, 3899);
                     } else if(w.getBlockId(x, y + 1, z) == 0) {
                        w.setBlock(x, y + 1, z, 3899);
                     }

                     return;
                  }

                  if(side == 3) {
                     if(w.getBlockId(x, y, z + 1) == 0) {
                        w.setBlock(x, y, z + 1, 3899);
                     } else if(w.getBlockId(x, y + 1, z) == 0) {
                        w.setBlock(x, y + 1, z, 3899);
                     }

                     return;
                  }

                  if(side == 5) {
                     if(w.getBlockId(x + 1, y, z) == 0) {
                        w.setBlock(x + 1, y, z, 3899);
                     } else if(w.getBlockId(x, y + 1, z) == 0) {
                        w.setBlock(x, y + 1, z, 3899);
                     }

                     return;
                  }

                  if(side == 2) {
                     if(w.getBlockId(x, y, z - 1) == 0) {
                        w.setBlock(x, y, z - 1, 3899);
                     } else if(w.getBlockId(x, y + 1, z) == 0) {
                        w.setBlock(x, y + 1, z, 3899);
                     }

                     return;
                  }
               }
            }

         }
      }
   }
Отвечает за спавн энтити в мире.
Ну вроде понятно, а вроде и нет...
 
Я вам скажу, что можно просто сетить определенный свет на определенный кордах.
 
Быдлокод:
Код:
if(side == 1) {
                     if(w.getBlockId(x, y + 1, z) == 31) {
                        if(w.getBlockId(x, y + 2, z) == 0) {
                           w.setBlock(x, y + 2, z, 3899);
                        }

                        return;
                     }

                     if(w.getBlockId(x, y + 1, z) == 0) {
                        w.setBlock(x, y + 1, z, 3899);
                     } else if(w.getBlockId(-((int)(e.getLookVec().xCoord * 1.5D)) + x, y + 1, -((int)(e.getLookVec().zCoord * 1.5D)) + z) == 0) {
                        w.setBlock(-((int)(e.getLookVec().xCoord * 1.5D)) + x, y + 1, -((int)(e.getLookVec().zCoord * 1.5D)) + z, 3899);
                     }

                     return;
                  }

                  if(side == 0) {
                     if(w.getBlockId(x, y - 1, z) == 0) {
                        w.setBlock(x, y - 1, z, 3899);
                     } else if(w.getBlockId(-((int)(e.getLookVec().xCoord * 1.5D)) + x, y - 1, -((int)(e.getLookVec().zCoord * 1.5D)) + z) == 0) {
                        w.setBlock(-((int)(e.getLookVec().xCoord * 1.5D)) + x, y - 1, -((int)(e.getLookVec().zCoord * 1.5D)) + z, 3899);
                     }

                     return;
                  }

                  if(side == 4) {
                     if(w.getBlockId(x - 1, y, z) == 0) {
                        w.setBlock(x - 1, y, z, 3899);
                     } else if(w.getBlockId(x, y + 1, z) == 0) {
                        w.setBlock(x, y + 1, z, 3899);
                     }

                     return;
                  }

                  if(side == 3) {
                     if(w.getBlockId(x, y, z + 1) == 0) {
                        w.setBlock(x, y, z + 1, 3899);
                     } else if(w.getBlockId(x, y + 1, z) == 0) {
                        w.setBlock(x, y + 1, z, 3899);
                     }

                     return;
                  }

                  if(side == 5) {
                     if(w.getBlockId(x + 1, y, z) == 0) {
                        w.setBlock(x + 1, y, z, 3899);
                     } else if(w.getBlockId(x, y + 1, z) == 0) {
                        w.setBlock(x, y + 1, z, 3899);
                     }

                     return;
                  }

                  if(side == 2) {
                     if(w.getBlockId(x, y, z - 1) == 0) {
                        w.setBlock(x, y, z - 1, 3899);
                     } else if(w.getBlockId(x, y + 1, z) == 0) {
                        w.setBlock(x, y + 1, z, 3899);
                     }

                     return;
                  }
Для таких случаев есть switch-case
 
Господи ты вообще нормальный,дракон? Switch-case во -первых меньше кода,а спавнить блок надо через Main.block.blockID,т.к. нельзя напоямую через иды спавнить. Фордж может сдвинуть их. Так что это w.setBlock(x, y + 2, z, 3899);на  w.setBlock(x, y + 2, z, переменнаяБлока.blockID);
[merge_posts_bbcode]Добавлено: 22.11.2014 12:47:21[/merge_posts_bbcode]

Вот мой код
Код:
        MovingObjectPosition b;
        if(b!=null){
            int x,y,z,side;
            x=b.blockX;
            y=b.blockY;
            z=b.blockZ;
            side=b.sideHit;
            switch(side)
            {
                case 0 : y--; break;
                case 1 : y++; break;
                case 2 : z--; break;
                case 3 : z++; break;
                case 4 : x--; break;
                case 5 : x++; break;
            }
            w.setBlock(x,y,z, block.blockID);
        }
    }
 
Dovakin, твой код протой, и это хорошо.
Но я не понял где блок то указывать(светящийся) и куда это прописывать :/


Код:
w.setBlock(x,y,z block.blockID)
не тут ли блок указывать вот так например
Код:
w.setBlock(x,y,z block.blockID.light)
[merge_posts_bbcode]Добавлено: 22.11.2014 18:21:08[/merge_posts_bbcode]

или вот так надо
Код:
w.setBlock(x,y,z light.blockID)
 
2 вариант.Просто типа main.block.blockID
А CraftZ.flashRange замени на дальность(у меня 20)
 
Оу, я тут поняла, что ничего не поняла... Я всё это читала так словно вы с другой планеты и я вижу, вы друг друга понимаете, что, куда и т.д... Похоже пока что мне не суждено всего этого понять, а жаль...
[merge_posts_bbcode]Добавлено: 22.11.2014 23:21:03[/merge_posts_bbcode]

Чтож, попытка не пытка, буду пытаться, если у меня ненароком получится что-нибудь, то я вам скажу, кину код полностью для незнающих...
 
Назад
Сверху