允许跳板输出红石信号

This commit is contained in:
17146 2025-06-15 23:38:58 +08:00 committed by Light_Quanta
parent 3c3c0d0bda
commit 7a2cc5e79b
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
3 changed files with 80 additions and 16 deletions

View file

@ -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

View file

@ -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
}

View file

@ -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<Block, BlockState> 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);
}
}
}