Jump to content

[SOLVED] Redstone Signal and Block Properties


Def Daemon

Recommended Posts

Hallo all

I'm trying to create a machine that works on redstone signal. The basis block contains three properties; FACING, LIT and POWERED. The idea is that this machine can only work when connected to a redstone signal so I'm using hasNeighborSignal() (in the NeighborChanged() method) to find out if there's a redstone signal. I'm using the code found in the RedstoneLampBlock class (changed LIT into POWERED of course), but the POWERED property won't change.

1. What am I doing wrong?

2. Can anyone explain the pState.cycle() method? No idea what it really does.

 

Here's my code:

public class AlloyMixerBlock extends BaseEntityBlock
{
    public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING;
    public static final BooleanProperty POWERED = BlockStateProperties.POWERED;
    public static final BooleanProperty LIT = BlockStateProperties.LIT;

    public AlloyMixerBlock(Properties properties)
    {
        super(properties);
        this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH).setValue(POWERED, Boolean.valueOf(false)).setValue(LIT, Boolean.valueOf(false)));
    }

    @Override
    public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHit)
    {
        if (!pLevel.isClientSide())
        {
            BlockEntity entity = pLevel.getBlockEntity(pPos);
            if(entity instanceof AlloyMixerBlockEntity) {
                NetworkHooks.openGui(((ServerPlayer)pPlayer), (AlloyMixerBlockEntity)entity, pPos);
            } else {
                throw new IllegalStateException("Our Container provider is missing!");
            }
        }
        return InteractionResult.sidedSuccess(pLevel.isClientSide());
    }

    @Override
    public BlockState getStateForPlacement(BlockPlaceContext pContext)
    {
        return this.defaultBlockState().setValue(POWERED, Boolean.valueOf(pContext.getLevel().hasNeighborSignal(pContext.getClickedPos()))).setValue(FACING, pContext.getHorizontalDirection().getOpposite()).setValue(LIT, Boolean.valueOf(false));
    }

    @Override
    public BlockState rotate(BlockState pState, Rotation pRotation)
    {
        return pState.setValue(FACING, pRotation.rotate(pState.getValue(FACING)));
    }

    @Override
    public BlockState mirror(BlockState pState, Mirror pMirror)
    {
        return pState.rotate(pMirror.getRotation(pState.getValue(FACING)));
    }

    @Override
    protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> pBuilder)
    {
        pBuilder.add(FACING, POWERED, LIT);
    }

    @Override
    public RenderShape getRenderShape(BlockState pState)
    {
        return RenderShape.MODEL;
    }

    @Override
    public void onRemove(BlockState pState, Level pLevel, BlockPos pPos, BlockState pNewState, boolean pIsMoving)
    {
        if (pState.getBlock() != pNewState.getBlock()) {
            BlockEntity blockEntity = pLevel.getBlockEntity(pPos);
            if (blockEntity instanceof AlloyMixerBlockEntity) {
                ((AlloyMixerBlockEntity) blockEntity).drops();
            }
        }
        super.onRemove(pState, pLevel, pPos, pNewState, pIsMoving);
    }

    @Nullable
    @Override
    public BlockEntity newBlockEntity(BlockPos pPos, BlockState pState)
    {
        return new AlloyMixerBlockEntity(pPos, pState);
    }

    @Override
    public void neighborChanged(BlockState pState, Level pLevel, BlockPos pPos, Block pBlock, BlockPos pFromPos, boolean pIsMoving)
    {
        ShowCurrentState("Before NeighborChanged:", pLevel, pState, pPos);
        if (!pLevel.isClientSide) {
            boolean flag = pState.getValue(POWERED);
            if (flag != pLevel.hasNeighborSignal(pPos)) {
                if (flag) {
                    Extreme_Survival.LOGGER.info("Flag != hasNeighborSignal and Flag = true");
                    pLevel.scheduleTick(pPos, this, 4);
                } else {
                    Extreme_Survival.LOGGER.info("Flag != hasNeighborSignal and Flag = false");
                    pLevel.setBlock(pPos, pState.cycle(POWERED), 2);
                }
            }
            else
            {
                Extreme_Survival.LOGGER.info("Flag equals pState");
            }
        }
        else

        {
            Extreme_Survival.LOGGER.info("Clientside!!!");
        }
        ShowCurrentState("After NeighborChanged:", pLevel, pState, pPos);
    }

 

// Just for debugging!

    private void ShowCurrentState(String title, Level pLevel, BlockState pState, BlockPos pPos)
    {
        Extreme_Survival.LOGGER.info(title);
        Extreme_Survival.LOGGER.info("======================================");
        Extreme_Survival.LOGGER.info("hasSignal: " + pLevel.hasNeighborSignal(pPos));
        Extreme_Survival.LOGGER.info("POWERED  : " + pState.getValue(POWERED));
        Extreme_Survival.LOGGER.info("LIT      : " + pState.getValue(LIT));
        Extreme_Survival.LOGGER.info("--------------------------------------");
        if (!pState.getValue(POWERED)) {
            pLevel.setBlock(pPos, pState.setValue(LIT, Boolean.valueOf(false)), 2);
        }
        Extreme_Survival.LOGGER.info("hasSignal: " + pLevel.hasNeighborSignal(pPos));
        Extreme_Survival.LOGGER.info("POWERED  : " + pState.getValue(POWERED));
        Extreme_Survival.LOGGER.info("LIT      : " + pState.getValue(LIT));
        Extreme_Survival.LOGGER.info("======================================");
    }
}

 

Edited by Def Daemon
Link to comment
Share on other sites

Well I added the following code, it doesn't change anything...

What does cycle() actually do?

 

public void tick(BlockState pState, ServerLevel pLevel, BlockPos pPos, Random pRand) {

    if (pState.getValue(POWERED) && !pLevel.hasNeighborSignal(pPos)) {

             pLevel.setBlock(pPos, pState.cycle(POWERED), 2); }

}

Link to comment
Share on other sites

Well changed the code into this and it works like a charm....thnx m8.... up to the fun part (BlockEntity)

    @Override
    public void neighborChanged(BlockState pState, Level pLevel, BlockPos pPos, Block pBlock, BlockPos pFromPos, boolean pIsMoving)
    {
        if (!pLevel.isClientSide) {
            boolean flag = pState.getValue(POWERED);
            if (flag != pLevel.hasNeighborSignal(pPos)) {
                if (flag) {
                    pLevel.scheduleTick(pPos, this, 4);
                } else {
                    pLevel.setBlock(pPos, pState.cycle(POWERED), 2);
                }
            }
        }
        UpdateCurrentState(pLevel, pState, pPos);
    }

    private void UpdateCurrentState(Level pLevel, BlockState pState, BlockPos pPos)
    {
        if(!pLevel.hasNeighborSignal(pPos))
        {
            pState.setValue(LIT, false);
        }
    }


    public void tick(BlockState pState, ServerLevel pLevel, BlockPos pPos, Random pRand)
    {
        if (pState.getValue(POWERED) && !pLevel.hasNeighborSignal(pPos))
        {
            pLevel.setBlock(pPos, pState.cycle(POWERED), 2);
        }
        UpdateCurrentState(pLevel, pState, pPos);
    }

 

Link to comment
Share on other sites

  • Def Daemon changed the title to [SOLVED] Redstone Signal and Block Properties

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • ”# +256752079972 !!!!” DEATH SPELLS IN UK, USA, AUSTRALIA ,NORWAY, ITALY, POLAND, SWEDEN, UAE, INDIANA, RUSSIA, UKRAINE, WORLDWIDE +256752079972 INSTANT DEATH SPELL CASTER / REVENGE SPELL/ VOODOO SPELLS IN USA.TRUSTED WITCHCRAFT AND BLACK MAGIC SPELLS CASTERS powerful voodoo , voodoo DEATH SPELL /voodoo, REVENGE SPELLS CASTER IN U.S.A U.K, SWITZERLAND,AMERICA,ENGLAND, CANADA. INSTANT DEATH SPELLS TO KILL ENEMIES +256752079972 Dr Mama Zola, black magic Revenge spells that work overnight or by accident i? Cast these strongest black magic revenge death spells that work fast overnight to kill ex lover, husband, wife girlfriend Enemies overnight without delay. It doesn’t matter whether he or she is in a far location, I guarantee you to have your results you are looking for immediately. Just make sure before you contact me you are committed and you want what you are looking for (Victim Death) because my Revenge spell work fast overnight after casting the spells. Immediately working black magic death spells that work fast will be cast on the person and result is 48hours.How To Cast A Revenge Spell On Someone, Call/ Whats App;+256752079972 Revenge Spells That Work Overnight to kill wicked Step-dad/ Step mom Death Revenge Spell on wicked friends,Voodoo Revenge Spells to kill Enemies Black Magic Spells To Harm Someone,Black magic Revenge spells on ex love Revenge instant Revenge spells on uncle, +256752079972 Dr Mama Zola, powerful instant Revenge spells caster, online instant spell that work fast in USA, UK, Kuwait, Germany, Asian, Europe, Philippines, Canada, South Africa, Italy, Peru, India, Iran, Gambia. Sweden, Australia, Nigeria, Spain, Ghana, California, Greece Dr Mama Zola, Voodoo revenge spell casters spell to make someone sick and die without delay. Dr mama Zola Phone : +256752079972
    • (((+256752079972]]] .=DEATH SPELL CASTER / REVENGE SPELL IN ITALY NORWAY AUSTRIA,USA,CANADA,GERMANY,EUROPE,AMERICA +256752079972 INSTANT DEATH SPELL CASTER / REVENGE SPELL/ VOODOO SPELLS IN USA.TRUSTED WITCHCRAFT AND BLACK MAGIC SPELLS CASTERS powerful voodoo , voodoo DEATH SPELL /voodoo, REVENGE SPELLS CASTER IN U.S.A U.K, SWITZERLAND,AMERICA,ENGLAND, CANADA. INSTANT DEATH SPELLS TO KILL ENEMIES +256752079972 Dr Mama Zola, black magic Revenge spells that work overnight or by accident i? Cast these strongest black magic revenge death spells that work fast overnight to kill ex lover, husband, wife girlfriend Enemies overnight without delay. It doesn’t matter whether he or she is in a far location, I guarantee you to have your results you are looking for immediately. Just make sure before you contact me you are committed and you want what you are looking for (Victim Death) because my Revenge spell work fast overnight after casting the spells. Immediately working black magic death spells that work fast will be cast on the person and result is 48hours.How To Cast A Revenge Spell On Someone, Call/ Whats App;+256752079972 Revenge Spells That Work Overnight to kill wicked Step-dad/ Step mom Death Revenge Spell on wicked friends,Voodoo Revenge Spells to kill Enemies Black Magic Spells To Harm Someone,Black magic Revenge spells on ex love Revenge instant Revenge spells on uncle, +256752079972 Dr Mama Zola, powerful instant Revenge spells caster, online instant spell that work fast in USA, UK, Kuwait, Germany, Asian, Europe, Philippines, Canada, South Africa, Italy, Peru, India, Iran, Gambia. Sweden, Australia, Nigeria, Spain, Ghana, California, Greece Dr Mama Zola, Voodoo revenge spell casters spell to make someone sick and die without delay. Dr mama Zola Phone : +256752079972
    • +256752079972 DEATH/REVENGE SPELLS CASTER IN AUSTRALIA, FINLAND, DENMARK, NORWAY, BELGIUM, SWEDEN, FRANCE, GERMANY, NETHERLANDS, BARBADOS, MEXICO, SPAIN, SCOTLAND. +256752079972 INSTANT DEATH SPELL CASTER / REVENGE SPELL/ VOODOO SPELLS IN USA.TRUSTED WITCHCRAFT AND BLACK MAGIC SPELLS CASTERS powerful voodoo , voodoo DEATH SPELL /voodoo, REVENGE SPELLS CASTER IN U.S.A U.K, SWITZERLAND,AMERICA,ENGLAND, CANADA. INSTANT DEATH SPELLS TO KILL ENEMIES +256752079972 Dr Mama Zola, black magic Revenge spells that work overnight or by accident i? Cast these strongest black magic revenge death spells that work fast overnight to kill ex lover, husband, wife girlfriend Enemies overnight without delay. It doesn’t matter whether he or she is in a far location, I guarantee you to have your results you are looking for immediately. Just make sure before you contact me you are committed and you want what you are looking for (Victim Death) because my Revenge spell work fast overnight after casting the spells. Immediately working black magic death spells that work fast will be cast on the person and result is 48hours.How To Cast A Revenge Spell On Someone, Call/ Whats App;+256752079972 Revenge Spells That Work Overnight to kill wicked Step-dad/ Step mom Death Revenge Spell on wicked friends,Voodoo Revenge Spells to kill Enemies Black Magic Spells To Harm Someone,Black magic Revenge spells on ex love Revenge instant Revenge spells on uncle, +256752079972 Dr Mama Zola, powerful instant Revenge spells caster, online instant spell that work fast in USA, UK, Kuwait, Germany, Asian, Europe, Philippines, Canada, South Africa, Italy, Peru, India, Iran, Gambia. Sweden, Australia, Nigeria, Spain, Ghana, California, Greece Dr Mama Zola, Voodoo revenge spell casters spell to make someone sick and die without delay. Dr mama Zola Phone : +256752079972
    • (( +256752079972 )) Active Death Revenge Spells Caster In Canada, Toronto, Ontario, Quebec City, Quebec, Vancouver, British Columbia, Calgary, Alberta, Ottawa +256752079972 INSTANT DEATH SPELL CASTER / REVENGE SPELL/ VOODOO SPELLS IN USA.TRUSTED WITCHCRAFT AND BLACK MAGIC SPELLS CASTERS powerful voodoo , voodoo DEATH SPELL /voodoo, REVENGE SPELLS CASTER IN U.S.A U.K, SWITZERLAND,AMERICA,ENGLAND, CANADA. INSTANT DEATH SPELLS TO KILL ENEMIES +256752079972 Dr Mama Zola, black magic Revenge spells that work overnight or by accident i? Cast these strongest black magic revenge death spells that work fast overnight to kill ex lover, husband, wife girlfriend Enemies overnight without delay. It doesn’t matter whether he or she is in a far location, I guarantee you to have your results you are looking for immediately. Just make sure before you contact me you are committed and you want what you are looking for (Victim Death) because my Revenge spell work fast overnight after casting the spells. Immediately working black magic death spells that work fast will be cast on the person and result is 48hours.How To Cast A Revenge Spell On Someone, Call/ Whats App;+256752079972 Revenge Spells That Work Overnight to kill wicked Step-dad/ Step mom Death Revenge Spell on wicked friends,Voodoo Revenge Spells to kill Enemies Black Magic Spells To Harm Someone,Black magic Revenge spells on ex love Revenge instant Revenge spells on uncle, +256752079972 Dr Mama Zola, powerful instant Revenge spells caster, online instant spell that work fast in USA, UK, Kuwait, Germany, Asian, Europe, Philippines, Canada, South Africa, Italy, Peru, India, Iran, Gambia. Sweden, Australia, Nigeria, Spain, Ghana, California, Greece Dr Mama Zola, Voodoo revenge spell casters spell to make someone sick and die without delay. Dr mama Zola Phone : +256752079972
    • +256752079972 DEATH SPELLS CASTER FOR REVENGE IN USA ,LUXEMBOURG , SEYCHELLES ,JAPAN , QATAR, ICELAND , BARBADOS, BARBUDA, BENIN, ARGENTINA,CAYMAN ISLANDS, EUADOR, COSTARICA , DOMINICA , FIJI , GRENADA, GUYANA, ISRAEL,KENYA, PANAMA, SAINT KITTS AND NEVIS , ST VINCENT , VENEZUELA ,COMOROS , SENEGAL,LEBANON, JAPAN, INDONESIA, TURKEY +256752079972 INSTANT DEATH SPELL CASTER / REVENGE SPELL/ VOODOO SPELLS IN USA.TRUSTED WITCHCRAFT AND BLACK MAGIC SPELLS CASTERS powerful voodoo , voodoo DEATH SPELL /voodoo, REVENGE SPELLS CASTER IN U.S.A U.K, SWITZERLAND,AMERICA,ENGLAND, CANADA. INSTANT DEATH SPELLS TO KILL ENEMIES +256752079972 Dr Mama Zola, black magic Revenge spells that work overnight or by accident i? Cast these strongest black magic revenge death spells that work fast overnight to kill ex lover, husband, wife girlfriend Enemies overnight without delay. It doesn’t matter whether he or she is in a far location, I guarantee you to have your results you are looking for immediately. Just make sure before you contact me you are committed and you want what you are looking for (Victim Death) because my Revenge spell work fast overnight after casting the spells. Immediately working black magic death spells that work fast will be cast on the person and result is 48hours.How To Cast A Revenge Spell On Someone, Call/ Whats App;+256752079972 Revenge Spells That Work Overnight to kill wicked Step-dad/ Step mom Death Revenge Spell on wicked friends,Voodoo Revenge Spells to kill Enemies Black Magic Spells To Harm Someone,Black magic Revenge spells on ex love Revenge instant Revenge spells on uncle, +256752079972 Dr Mama Zola, powerful instant Revenge spells caster, online instant spell that work fast in USA, UK, Kuwait, Germany, Asian, Europe, Philippines, Canada, South Africa, Italy, Peru, India, Iran, Gambia. Sweden, Australia, Nigeria, Spain, Ghana, California, Greece Dr Mama Zola, Voodoo revenge spell casters spell to make someone sick and die without delay. Dr mama Zola Phone : +256752079972
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.