mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
Add off variations to lights, activated by applying power (like redstone torches)
This commit is contained in:
parent
58ec00004c
commit
8790e4fa3f
@ -336,8 +336,11 @@ public class ModBlocks {
|
||||
public static Block lantern_behemoth;
|
||||
|
||||
public static Block spotlight_incandescent;
|
||||
public static Block spotlight_incandescent_off;
|
||||
public static Block spotlight_fluoro;
|
||||
public static Block spotlight_fluoro_off;
|
||||
public static Block spotlight_halogen;
|
||||
public static Block spotlight_halogen_off;
|
||||
public static Block spotlight_beam;
|
||||
|
||||
public static Block reinforced_stone;
|
||||
@ -1565,9 +1568,12 @@ public class ModBlocks {
|
||||
lantern = new BlockLantern().setBlockName("lantern").setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setLightLevel(1F).setHardness(3.0F).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
lantern_behemoth = new BlockLanternBehemoth().setBlockName("lantern_behemoth").setStepSound(Block.soundTypeMetal).setCreativeTab(null).setHardness(3.0F).setBlockTextureName(RefStrings.MODID + ":block_rust");
|
||||
|
||||
spotlight_incandescent = new Spotlight(Material.iron, 2, LightType.INCANDESCENT).setBlockName("spotlight_incandescent").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":cage_lamp");
|
||||
spotlight_fluoro = new SpotlightModular(Material.iron, 8, LightType.FLUORESCENT).setBlockName("spotlight_fluoro").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":fluorescent_lamp");
|
||||
spotlight_halogen = new Spotlight(Material.iron, 32, LightType.HALOGEN).setBlockName("spotlight_halogen").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":flood_lamp");
|
||||
spotlight_incandescent = new Spotlight(Material.iron, 2, LightType.INCANDESCENT, true).setBlockName("spotlight_incandescent").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":cage_lamp");
|
||||
spotlight_incandescent_off = new Spotlight(Material.iron, 2, LightType.INCANDESCENT, false).setBlockName("spotlight_incandescent_off").setBlockTextureName(RefStrings.MODID + ":cage_lamp_off");
|
||||
spotlight_fluoro = new SpotlightModular(Material.iron, 8, LightType.FLUORESCENT, true).setBlockName("spotlight_fluoro").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":fluorescent_lamp");
|
||||
spotlight_fluoro_off = new SpotlightModular(Material.iron, 8, LightType.FLUORESCENT, false).setBlockName("spotlight_fluoro_off").setBlockTextureName(RefStrings.MODID + ":fluorescent_lamp_off");
|
||||
spotlight_halogen = new Spotlight(Material.iron, 32, LightType.HALOGEN, true).setBlockName("spotlight_halogen").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":flood_lamp");
|
||||
spotlight_halogen_off = new Spotlight(Material.iron, 32, LightType.HALOGEN, false).setBlockName("spotlight_halogen_off").setBlockTextureName(RefStrings.MODID + ":flood_lamp_off");
|
||||
spotlight_beam = new SpotlightBeam().setBlockName("spotlight_beam");
|
||||
|
||||
reinforced_stone = new BlockGeneric(Material.rock).setBlockName("reinforced_stone").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(100.0F).setBlockTextureName(RefStrings.MODID + ":reinforced_stone");
|
||||
@ -2749,8 +2755,11 @@ public class ModBlocks {
|
||||
GameRegistry.registerBlock(lantern, lantern.getUnlocalizedName());
|
||||
GameRegistry.registerBlock(lantern_behemoth, lantern_behemoth.getUnlocalizedName());
|
||||
GameRegistry.registerBlock(spotlight_incandescent, spotlight_incandescent.getUnlocalizedName());
|
||||
GameRegistry.registerBlock(spotlight_incandescent_off, spotlight_incandescent_off.getUnlocalizedName());
|
||||
GameRegistry.registerBlock(spotlight_fluoro, spotlight_fluoro.getUnlocalizedName());
|
||||
GameRegistry.registerBlock(spotlight_fluoro_off, spotlight_fluoro_off.getUnlocalizedName());
|
||||
GameRegistry.registerBlock(spotlight_halogen, spotlight_halogen.getUnlocalizedName());
|
||||
GameRegistry.registerBlock(spotlight_halogen_off, spotlight_halogen_off.getUnlocalizedName());
|
||||
GameRegistry.registerBlock(spotlight_beam, spotlight_beam.getUnlocalizedName());
|
||||
|
||||
//Reinforced Blocks
|
||||
|
||||
@ -77,7 +77,7 @@ public class ReinforcedLamp extends Block {
|
||||
return new ItemStack(getOff());
|
||||
}
|
||||
|
||||
private Block getOff() {
|
||||
protected Block getOff() {
|
||||
|
||||
if(this == ModBlocks.reinforced_lamp_on)
|
||||
return ModBlocks.reinforced_lamp_off;
|
||||
@ -89,7 +89,7 @@ public class ReinforcedLamp extends Block {
|
||||
return this;
|
||||
}
|
||||
|
||||
private Block getOn() {
|
||||
protected Block getOn() {
|
||||
|
||||
if(this == ModBlocks.reinforced_lamp_off)
|
||||
return ModBlocks.reinforced_lamp_on;
|
||||
|
||||
@ -1,13 +1,20 @@
|
||||
package com.hbm.blocks.machine;
|
||||
|
||||
import com.hbm.blocks.ModBlocks;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import com.hbm.blocks.BlockEnums.LightType;
|
||||
import com.hbm.main.ResourceManager;
|
||||
|
||||
import cpw.mods.fml.client.registry.RenderingRegistry;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockSlab;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
@ -16,15 +23,22 @@ import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class Spotlight extends Block {
|
||||
|
||||
// I'd be extending the ReinforcedLamp class if it wasn't for the inverted behaviour of these specific lights
|
||||
// I want these blocks to be eminently useful, so removing the need for redstone by default is desired,
|
||||
// these act more like redstone torches, in that applying a signal turns them off
|
||||
public boolean isOn;
|
||||
|
||||
public int beamLength;
|
||||
public LightType type;
|
||||
|
||||
public Spotlight(Material mat, int beamLength, LightType type) {
|
||||
public Spotlight(Material mat, int beamLength, LightType type, boolean isOn) {
|
||||
super(mat);
|
||||
setLightLevel(1.0F);
|
||||
|
||||
|
||||
this.beamLength = beamLength;
|
||||
this.type = type;
|
||||
this.isOn = isOn;
|
||||
|
||||
if (isOn) setLightLevel(1.0F);
|
||||
}
|
||||
|
||||
public static int renderID = RenderingRegistry.getNextAvailableRenderId();
|
||||
@ -104,9 +118,25 @@ public class Spotlight extends Block {
|
||||
@Override
|
||||
public void onBlockAdded(World world, int x, int y, int z) {
|
||||
if (world.isRemote) return;
|
||||
|
||||
if (updatePower(world, x, y, z)) return;
|
||||
|
||||
updateBeam(world, x, y, z);
|
||||
}
|
||||
|
||||
private boolean updatePower(World world, int x, int y, int z) {
|
||||
boolean isPowered = world.isBlockIndirectlyGettingPowered(x, y, z);
|
||||
if (isOn && isPowered) {
|
||||
world.scheduleBlockUpdate(x, y, z, this, 4);
|
||||
return true;
|
||||
} else if (!isOn && !isPowered) {
|
||||
world.setBlock(x, y, z, getOn(), world.getBlockMetadata(x, y, z), 2);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void breakBlock(World world, int x, int y, int z, Block block, int metadata) {
|
||||
ForgeDirection dir = getDirection(metadata);
|
||||
@ -117,6 +147,15 @@ public class Spotlight extends Block {
|
||||
unpropagateBeam(world, x, y, z, dir);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateTick(World world, int x, int y, int z, Random p_149674_5_) {
|
||||
if (world.isRemote) return;
|
||||
|
||||
if (isOn && world.isBlockIndirectlyGettingPowered(x, y, z)) {
|
||||
world.setBlock(x, y, z, getOff(), world.getBlockMetadata(x, y, z), 2);
|
||||
}
|
||||
}
|
||||
|
||||
// Repropagate the beam if we've become unblocked
|
||||
@Override
|
||||
public void onNeighborBlockChange(World world, int x, int y, int z, Block neighborBlock) {
|
||||
@ -131,6 +170,8 @@ public class Spotlight extends Block {
|
||||
return;
|
||||
}
|
||||
|
||||
if (updatePower(world, x, y, z)) return;
|
||||
|
||||
updateBeam(world, x, y, z);
|
||||
}
|
||||
|
||||
@ -161,6 +202,8 @@ public class Spotlight extends Block {
|
||||
}
|
||||
|
||||
private void updateBeam(World world, int x, int y, int z) {
|
||||
if (!isOn) return;
|
||||
|
||||
ForgeDirection dir = getDirection(world, x, y, z);
|
||||
propagateBeam(world, x, y, z, dir, beamLength);
|
||||
}
|
||||
@ -174,6 +217,22 @@ public class Spotlight extends Block {
|
||||
return ForgeDirection.getOrientation(metadata >> 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item getItemDropped(int i, Random r, int j) {
|
||||
return Item.getItemFromBlock(getOn());
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public Item getItem(World world, int x, int y, int z) {
|
||||
return Item.getItemFromBlock(getOn());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ItemStack createStackedBlock(int e) {
|
||||
return new ItemStack(getOn());
|
||||
}
|
||||
|
||||
// Recursively add beam blocks, updating any that already exist with new incoming light directions
|
||||
public static void propagateBeam(World world, int x, int y, int z, ForgeDirection dir, int distance) {
|
||||
distance--;
|
||||
@ -230,5 +289,27 @@ public class Spotlight extends Block {
|
||||
|
||||
backPropagate(world, x, y, z, dir);
|
||||
}
|
||||
|
||||
protected Block getOff() {
|
||||
if(this == ModBlocks.spotlight_incandescent)
|
||||
return ModBlocks.spotlight_incandescent_off;
|
||||
if(this == ModBlocks.spotlight_fluoro)
|
||||
return ModBlocks.spotlight_fluoro_off;
|
||||
if(this == ModBlocks.spotlight_halogen)
|
||||
return ModBlocks.spotlight_halogen_off;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
protected Block getOn() {
|
||||
if(this == ModBlocks.spotlight_incandescent_off)
|
||||
return ModBlocks.spotlight_incandescent;
|
||||
if(this == ModBlocks.spotlight_fluoro_off)
|
||||
return ModBlocks.spotlight_fluoro;
|
||||
if(this == ModBlocks.spotlight_halogen_off)
|
||||
return ModBlocks.spotlight_halogen;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -7,8 +7,8 @@ import net.minecraft.world.IBlockAccess;
|
||||
|
||||
public class SpotlightModular extends Spotlight {
|
||||
|
||||
public SpotlightModular(Material mat, int beamLength, LightType type) {
|
||||
super(mat, beamLength, type);
|
||||
public SpotlightModular(Material mat, int beamLength, LightType type, boolean isOn) {
|
||||
super(mat, beamLength, type, isOn);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -131,6 +131,9 @@ public class NEIConfig implements IConfigureNEI {
|
||||
API.hideItem(new ItemStack(ModBlocks.pink_double_slab));
|
||||
API.hideItem(new ItemStack(ModBlocks.pink_stairs));
|
||||
|
||||
API.hideItem(new ItemStack(ModBlocks.spotlight_incandescent_off));
|
||||
API.hideItem(new ItemStack(ModBlocks.spotlight_fluoro_off));
|
||||
API.hideItem(new ItemStack(ModBlocks.spotlight_halogen_off));
|
||||
API.hideItem(new ItemStack(ModBlocks.spotlight_beam));
|
||||
|
||||
API.registerHighlightIdentifier(ModBlocks.ore_random, new IHighlightHandler() {
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 4.7 KiB |
BIN
src/main/resources/assets/hbm/textures/blocks/cage_lamp_off.png
Normal file
BIN
src/main/resources/assets/hbm/textures/blocks/cage_lamp_off.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.9 KiB |
BIN
src/main/resources/assets/hbm/textures/blocks/flood_lamp_off.png
Normal file
BIN
src/main/resources/assets/hbm/textures/blocks/flood_lamp_off.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.8 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 4.5 KiB |
Loading…
x
Reference in New Issue
Block a user