diff --git a/src/main/java/su/a71/new_soviet/blocks/AirRaidBlock.java b/src/main/java/su/a71/new_soviet/blocks/SirenBlock.java similarity index 50% rename from src/main/java/su/a71/new_soviet/blocks/AirRaidBlock.java rename to src/main/java/su/a71/new_soviet/blocks/SirenBlock.java index 2db7740..a057caa 100644 --- a/src/main/java/su/a71/new_soviet/blocks/AirRaidBlock.java +++ b/src/main/java/su/a71/new_soviet/blocks/SirenBlock.java @@ -3,28 +3,52 @@ package su.a71.new_soviet.blocks; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.block.*; import net.minecraft.block.piston.PistonBehavior; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemPlacementContext; +import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.sound.SoundCategory; import net.minecraft.state.StateManager; +import net.minecraft.state.property.BooleanProperty; import net.minecraft.state.property.Properties; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; +import net.minecraft.util.math.random.Random; import net.minecraft.util.shape.VoxelShape; import net.minecraft.util.shape.VoxelShapes; import net.minecraft.world.BlockView; -import net.minecraft.block.TripwireHookBlock; +import net.minecraft.world.World; import net.minecraft.world.WorldView; +import su.a71.new_soviet.NewSoviet; +import su.a71.new_soviet.registration.NSE_Custom; -public class AirRaidBlock extends HorizontalFacingBlock { - public AirRaidBlock() { +public class SirenBlock extends HorizontalFacingBlock { + public static final BooleanProperty ON; + + public SirenBlock() { super(FabricBlockSettings.create().sounds(BlockSoundGroup.METAL).notSolid().pistonBehavior(PistonBehavior.DESTROY).strength(1f, 2f)); - setDefaultState(getDefaultState().with(Properties.HORIZONTAL_FACING, Direction.NORTH)); + setDefaultState(getDefaultState().with(Properties.HORIZONTAL_FACING, Direction.NORTH).with(ON, false)); } @Override protected void appendProperties(StateManager.Builder builder) { - builder.add(Properties.HORIZONTAL_FACING); + builder.add(Properties.HORIZONTAL_FACING, ON); + } + + public void neighborUpdate(BlockState state, World world, BlockPos pos, Block sourceBlock, BlockPos sourcePos, boolean notify) { + if (!world.isClient) { + boolean bl = (Boolean)state.get(ON); + if (bl != world.isReceivingRedstonePower(pos)) { + if (bl) { + world.scheduleBlockTick(pos, this, 4); + } else { + world.playSound((PlayerEntity)null, pos.getX(), pos.getY(), pos.getZ(), NSE_Custom.SIREN_SOUND, SoundCategory.NEUTRAL, 1F, 1f); + world.setBlockState(pos, (BlockState)state.cycle(ON), 2); + world.scheduleBlockTick(pos, this, 140); + } + } + } } @Override @@ -46,7 +70,7 @@ public class AirRaidBlock extends HorizontalFacingBlock { @Override public BlockState getPlacementState(ItemPlacementContext ctx) { - return super.getPlacementState(ctx).with(Properties.HORIZONTAL_FACING, ctx.getHorizontalPlayerFacing().getOpposite()); + return super.getPlacementState(ctx).with(Properties.HORIZONTAL_FACING, ctx.getHorizontalPlayerFacing().getOpposite()).with(ON, ctx.getWorld().isReceivingRedstonePower(ctx.getBlockPos())); } public boolean canPlaceAt(BlockState state, WorldView world, BlockPos pos) { @@ -55,4 +79,21 @@ public class AirRaidBlock extends HorizontalFacingBlock { BlockState blockState = world.getBlockState(blockPos); return direction.getAxis().isHorizontal() && blockState.isSideSolidFullSquare(world, blockPos, direction); } + + public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random random) { + NewSoviet.LOG.info("Scheduled tick"); + if ((Boolean)state.get(ON) && !world.isReceivingRedstonePower(pos)) { + world.setBlockState(pos, (BlockState)state.cycle(ON), 2); + NewSoviet.LOG.info("Stopping!"); + + } else { + NewSoviet.LOG.info("Playing!"); + world.playSound((PlayerEntity)null, pos.getX(), pos.getY(), pos.getZ(), NSE_Custom.SIREN_SOUND, SoundCategory.NEUTRAL, 1F, 1f); + world.scheduleBlockTick(pos, this, 140); + } + } + + static { + ON = RedstoneTorchBlock.LIT; + } } \ No newline at end of file diff --git a/src/main/java/su/a71/new_soviet/registration/NSE_Custom.java b/src/main/java/su/a71/new_soviet/registration/NSE_Custom.java index dc07b6b..9e9660b 100644 --- a/src/main/java/su/a71/new_soviet/registration/NSE_Custom.java +++ b/src/main/java/su/a71/new_soviet/registration/NSE_Custom.java @@ -13,6 +13,7 @@ import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; import net.minecraft.registry.RegistryKey; import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.sound.SoundEvent; import net.minecraft.text.Text; import net.minecraft.util.Identifier; import su.a71.new_soviet.NewSoviet; @@ -30,8 +31,8 @@ public class NSE_Custom { public static final LampBlock LAMP = new LampBlock(FabricBlockSettings.create().sounds(BlockSoundGroup.LANTERN).strength(1f, 1.5f).mapColor(MapColor.WHITE)); public static final CeilingFanBlock CEILING_FAN = new CeilingFanBlock(FabricBlockSettings.create().sounds(BlockSoundGroup.METAL).strength(1f, 1.5f).mapColor(MapColor.WHITE)); - public static final AirRaidBlock SIREN = new AirRaidBlock(); - + public static final SirenBlock SIREN = new SirenBlock(); + public static final SoundEvent SIREN_SOUND = SoundEvent.of(new Identifier("new_soviet", "siren_sound")); private static final ItemGroup NSE_CUSTOM_TAB = FabricItemGroup.builder() .icon(() -> new ItemStack(TV)) @@ -60,5 +61,6 @@ public class NSE_Custom { register("ceiling_fan", () -> CEILING_FAN, NSE_CUSTOM_TAB); register("siren", () -> SIREN, NSE_CUSTOM_TAB); + Registry.register(Registries.SOUND_EVENT, new Identifier("new_soviet", "siren_sound"), SIREN_SOUND); } } \ No newline at end of file diff --git a/src/main/resources/assets/new_soviet/lang/en_us.json b/src/main/resources/assets/new_soviet/lang/en_us.json index 9e777e0..6fc4bf9 100644 --- a/src/main/resources/assets/new_soviet/lang/en_us.json +++ b/src/main/resources/assets/new_soviet/lang/en_us.json @@ -140,5 +140,6 @@ "block.new_soviet.landmine": "AP Landmine", "block.new_soviet.chiseled_mangrove_door": "Chiseled Mangrove Door", "block.new_soviet.chiseled_oak_door": "Chiseled Oak Door", - "block.new_soviet.chiseled_spruce_door": "Chiseled Spruce Door" + "block.new_soviet.chiseled_spruce_door": "Chiseled Spruce Door", + "subtitles.new_soviet.siren": "Siren goes off" } \ No newline at end of file diff --git a/src/main/resources/assets/new_soviet/sounds.json b/src/main/resources/assets/new_soviet/sounds.json index 7762369..b1c44b9 100644 --- a/src/main/resources/assets/new_soviet/sounds.json +++ b/src/main/resources/assets/new_soviet/sounds.json @@ -4,6 +4,12 @@ "sounds": [ "new_soviet:dice_roll" ] + }, + "siren_sound": { + "subtitle": "subtitles.new_soviet.siren", + "sounds": [ + "new_soviet:siren" + ] } } diff --git a/src/main/resources/assets/new_soviet/sounds/siren.ogg b/src/main/resources/assets/new_soviet/sounds/siren.ogg new file mode 100644 index 0000000..afe4c3e Binary files /dev/null and b/src/main/resources/assets/new_soviet/sounds/siren.ogg differ