diff --git a/src/generated/resources/.cache/f93f628a3b0902e77de76541bcff68d1e5e3578f b/src/generated/resources/.cache/f93f628a3b0902e77de76541bcff68d1e5e3578f index 80badb823..2f0d3bf64 100644 --- a/src/generated/resources/.cache/f93f628a3b0902e77de76541bcff68d1e5e3578f +++ b/src/generated/resources/.cache/f93f628a3b0902e77de76541bcff68d1e5e3578f @@ -1,4 +1,4 @@ -// 1.21.1 2025-05-13T23:25:47.0567948 Block States: superbwarfare +// 1.21.1 2025-06-16T00:14:13.2039625 Block States: superbwarfare d91c9c8e6e02a0f7c75b02aaccfd1ecf98ad199b assets/superbwarfare/blockstates/aircraft_catapult.json f3b778ca36ca78c3d80f1b778078897f59bdb0c5 assets/superbwarfare/blockstates/barbed_wire.json 0cfad4f53a8047c402edf978d0c8cf6269f063cb assets/superbwarfare/blockstates/cemented_carbide_block.json @@ -10,7 +10,7 @@ b8b7cdea6c8626c74d652d0b300b3afe19c60674 assets/superbwarfare/blockstates/deepsl 2b24b703de4821bebe71ba53043e6a1a23d71c17 assets/superbwarfare/blockstates/deepslate_silver_ore.json 97e139f7c7111d135e0732c46134192cecbf8620 assets/superbwarfare/blockstates/fumo_25.json d8a6ec32752f10b1f363f6c78ed2da6dc895d545 assets/superbwarfare/blockstates/galena_ore.json -37d592516f2b685940e46f7d5c524407a200eeac assets/superbwarfare/blockstates/jump_pad.json +f6ddef959869370f4b8b300f63fb999607576bfb assets/superbwarfare/blockstates/jump_pad.json 3b464a0684d05c28c8485f764c7ad7e86ae48c06 assets/superbwarfare/blockstates/lead_block.json d765539a643378e4f8ce56dc42bcff579d666e8a assets/superbwarfare/blockstates/reforging_table.json 123574c25d10de6d915514af34f0a878c93a07ea assets/superbwarfare/blockstates/scheelite_ore.json diff --git a/src/generated/resources/assets/superbwarfare/blockstates/jump_pad.json b/src/generated/resources/assets/superbwarfare/blockstates/jump_pad.json index 58d23acfa..b8762a789 100644 --- a/src/generated/resources/assets/superbwarfare/blockstates/jump_pad.json +++ b/src/generated/resources/assets/superbwarfare/blockstates/jump_pad.json @@ -1,32 +1,62 @@ { "variants": { - "facing=east,waterlogged=false": { + "activated=false,facing=east,waterlogged=false": { "model": "superbwarfare:block/jump_pad", "y": 90 }, - "facing=east,waterlogged=true": { + "activated=false,facing=east,waterlogged=true": { "model": "superbwarfare:block/jump_pad", "y": 90 }, - "facing=north,waterlogged=false": { + "activated=false,facing=north,waterlogged=false": { "model": "superbwarfare:block/jump_pad" }, - "facing=north,waterlogged=true": { + "activated=false,facing=north,waterlogged=true": { "model": "superbwarfare:block/jump_pad" }, - "facing=south,waterlogged=false": { + "activated=false,facing=south,waterlogged=false": { "model": "superbwarfare:block/jump_pad", "y": 180 }, - "facing=south,waterlogged=true": { + "activated=false,facing=south,waterlogged=true": { "model": "superbwarfare:block/jump_pad", "y": 180 }, - "facing=west,waterlogged=false": { + "activated=false,facing=west,waterlogged=false": { "model": "superbwarfare:block/jump_pad", "y": 270 }, - "facing=west,waterlogged=true": { + "activated=false,facing=west,waterlogged=true": { + "model": "superbwarfare:block/jump_pad", + "y": 270 + }, + "activated=true,facing=east,waterlogged=false": { + "model": "superbwarfare:block/jump_pad", + "y": 90 + }, + "activated=true,facing=east,waterlogged=true": { + "model": "superbwarfare:block/jump_pad", + "y": 90 + }, + "activated=true,facing=north,waterlogged=false": { + "model": "superbwarfare:block/jump_pad" + }, + "activated=true,facing=north,waterlogged=true": { + "model": "superbwarfare:block/jump_pad" + }, + "activated=true,facing=south,waterlogged=false": { + "model": "superbwarfare:block/jump_pad", + "y": 180 + }, + "activated=true,facing=south,waterlogged=true": { + "model": "superbwarfare:block/jump_pad", + "y": 180 + }, + "activated=true,facing=west,waterlogged=false": { + "model": "superbwarfare:block/jump_pad", + "y": 270 + }, + "activated=true,facing=west,waterlogged=true": { "model": "superbwarfare:block/jump_pad", "y": 270 } diff --git a/src/main/java/com/atsuishio/superbwarfare/block/JumpPadBlock.java b/src/main/java/com/atsuishio/superbwarfare/block/JumpPadBlock.java index f1ab239b4..150272599 100644 --- a/src/main/java/com/atsuishio/superbwarfare/block/JumpPadBlock.java +++ b/src/main/java/com/atsuishio/superbwarfare/block/JumpPadBlock.java @@ -7,7 +7,9 @@ import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.init.ModSounds; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundSource; +import net.minecraft.util.RandomSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.context.BlockPlaceContext; @@ -15,6 +17,7 @@ import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; @@ -36,10 +39,13 @@ public class JumpPadBlock extends Block { public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING; + private static final BooleanProperty ACTIVATED = BooleanProperty.create("activated"); + + private static final int ACTIVATION_TICKS = 4; public JumpPadBlock() { - super(Properties.of().instrument(NoteBlockInstrument.BASEDRUM).sound(SoundType.STONE).strength(3f, 8f).noCollission().noOcclusion().isRedstoneConductor((bs, br, bp) -> false)); - this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH).setValue(WATERLOGGED, false)); + super(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.BASEDRUM).sound(SoundType.STONE).strength(3f, 8f).noCollission().noOcclusion().isRedstoneConductor((bs, br, bp) -> false)); + this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH).setValue(WATERLOGGED, false).setValue(ACTIVATED, false)); } @Override @@ -71,13 +77,13 @@ public class JumpPadBlock extends Block { @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(FACING, WATERLOGGED); + builder.add(FACING, WATERLOGGED, ACTIVATED); } @Override public BlockState getStateForPlacement(BlockPlaceContext context) { boolean flag = context.getLevel().getFluidState(context.getClickedPos()).getType() == Fluids.WATER; - return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()).setValue(WATERLOGGED, flag); + return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()).setValue(WATERLOGGED, flag).setValue(ACTIVATED, false); } @Override @@ -104,8 +110,8 @@ public class JumpPadBlock extends Block { @Override @ParametersAreNonnullByDefault - public void entityInside(BlockState blockstate, Level level, BlockPos pos, Entity entity) { - super.entityInside(blockstate, level, pos, entity); + public void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { + super.entityInside(state, level, pos, entity); // 禁止套娃 if (entity instanceof TargetEntity || entity instanceof CannonEntity) return; @@ -120,6 +126,10 @@ public class JumpPadBlock extends Block { entity.setDeltaMovement(new Vec3(0.7 * entity.getDeltaMovement().x(), 1.7, 0.7 * entity.getDeltaMovement().z())); } + if (!level.getBlockTicks().hasScheduledTick(pos, state.getBlock())) { + setOutputPower(level, state, pos, ACTIVATION_TICKS); + } + if (!level.isClientSide()) { level.playSound(null, BlockPos.containing(pos.getX(), pos.getY(), pos.getZ()), ModSounds.JUMP.get(), SoundSource.BLOCKS, 1, 1); } else { @@ -136,4 +146,28 @@ public class JumpPadBlock extends Block { Mod.queueClientWork(2, () -> ClientEventHandler.canDoubleJump = true); } } + + private static void setOutputPower(LevelAccessor pLevel, BlockState pState, BlockPos pPos, int pWaitTime) { + pLevel.setBlock(pPos, pState.setValue(ACTIVATED, true), 3); + pLevel.scheduleTick(pPos, pState.getBlock(), pWaitTime); + } + + @Override + public boolean isSignalSource(@NotNull BlockState pState) { + return true; + } + + @Override + @ParametersAreNonnullByDefault + public int getSignal(BlockState pState, BlockGetter pLevel, BlockPos pPos, Direction pDirection) { + return pState.getValue(ACTIVATED) ? 15 : 0; + } + + @Override + @ParametersAreNonnullByDefault + public void tick(BlockState pState, ServerLevel pLevel, BlockPos pPos, RandomSource pRandom) { + if (pState.getValue(ACTIVATED)) { + pLevel.setBlock(pPos, pState.setValue(ACTIVATED, false), 3); + } + } }