/
Belyash5
/
Flu
Обзор
Документация
Войти
/
Belyash5
/
Flu
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/main/java/com/hbm/blocks/generic/TritiumLamp.java
117 строк
3 KB
Boblet
tritium lamps now have a shoddy light beam implementation too
12 фев 2024, 10:53
12 фев 2024, 10:53
a6ccd25
Код
Авторство
О чём код?
package com.hbm.blocks.generic; import java.util.Random; import com.hbm.blocks.ISpotlight; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.machine.Spotlight; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; public class TritiumLamp extends Block implements ISpotlight { private final boolean isOn; public TritiumLamp(Material mat, boolean isOn) { super(mat); this.isOn = isOn; if(isOn) { this.setLightLevel(1.0F); } } @Override public void onBlockAdded(World world, int x, int y, int z) { if(!world.isRemote) { if(this.isOn && !world.isBlockIndirectlyGettingPowered(x, y, z)) { world.scheduleBlockUpdate(x, y, z, this, 4); } else if(!this.isOn && world.isBlockIndirectlyGettingPowered(x, y, z)) { world.setBlock(x, y, z, getOn(), 0, 2); } updateBeam(world, x, y, z); } } @Override public void onNeighborBlockChange(World world, int x, int y, int z, Block b) { if(!world.isRemote) { if(this.isOn && !world.isBlockIndirectlyGettingPowered(x, y, z)) { world.scheduleBlockUpdate(x, y, z, this, 4); } else if(!this.isOn && world.isBlockIndirectlyGettingPowered(x, y, z)) { world.setBlock(x, y, z, getOn(), 0, 2); } updateBeam(world, x, y, z); } } @Override public void updateTick(World world, int x, int y, int z, Random p_149674_5_) { if(!world.isRemote && this.isOn && !world.isBlockIndirectlyGettingPowered(x, y, z)) { world.setBlock(x, y, z, getOff(), 0, 2); } } @Override public void breakBlock(World world, int x, int y, int z, Block block, int metadata) { super.breakBlock(world, x, y, z, block, metadata); if(world.isRemote) return; for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) Spotlight.unpropagateBeam(world, x, y, z, dir); } private void updateBeam(World world, int x, int y, int z) { if(!isOn) return; for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) Spotlight.propagateBeam(world, x, y, z, dir, getBeamLength()); } @Override public Item getItemDropped(int i, Random r, int j) { return Item.getItemFromBlock(getOff()); } @Override @SideOnly(Side.CLIENT) public Item getItem(World world, int x, int y, int z) { return Item.getItemFromBlock(getOff()); } @Override protected ItemStack createStackedBlock(int e) { return new ItemStack(getOff()); } protected Block getOff() { if(this == ModBlocks.lamp_tritium_green_on) return ModBlocks.lamp_tritium_green_off; if(this == ModBlocks.lamp_tritium_blue_on) return ModBlocks.lamp_tritium_blue_off; return this; } protected Block getOn() { if(this == ModBlocks.lamp_tritium_green_off) return ModBlocks.lamp_tritium_green_on; if(this == ModBlocks.lamp_tritium_blue_off) return ModBlocks.lamp_tritium_blue_on; return this; } @Override public int getBeamLength() { return 8; } }