Only show region title for players entering/exiting the area in Bedrock edition?
I've added a creative region to my survival world and when players enter/exit that region, I want to display a title and subtitle like so:
This is easy enough to do with the title
command and a command block, but I'm having trouble getting the title to only display for players entering/exiting the area.
Currently, I'm trying to chain command blocks to accomplish this task, but I'm not against crafting a function for it, as that's the end goal anyways (though I need the command block way first because my behavior pack isn't ready yet). The setup is currently:
# Block 1 (Repeat, Unconditional, Always Active)
tag @a[r=64] add "home"
# Block 2 (Chain, Conditional, Always Active)
gamemode creative @a[r=70,tag="home"]
# Block 3 (Chain, Conditional, Always Active)
tag @a[r=70,tag="home"] add "home-title"
# Block 4 (Chain, Conditional, Always Active)
title @a[r=70,tag="home-title"] subtitle "This is a safe space."
# Block 5 (Chain, Conditional, Always Active)
title @a[r=70,tag="home-title"] title "Home Base"
There are three other command blocks that are responsible for the exit process, all of which are set to:
- Repeat
- Unconditional
- Always Active
Their commands are:
# Block 1
tag @a[rm=65] remove "home"
# Block 2
tag @a[rm=65] remove "home-title"
# Block 3
gamemode survival @a[rm=65]
My thought process was that for players that already have the home tag, the remaining blocks wouldn't execute, however this is not a true statement, and in hindsight, it never could've been since all remaining blocks impact all players within a 64 block radius.
How can I adjust my setup to ensure only players that are entering/exiting the area will see the title/subtitle with command blocks?
Bonus: Can it be done in a single function?
Solution 1:
I am slightly confused as to what you're asking, but I think your issue is that you don't want:
tag @a[r=64] add "home"
to return a success if they already have home. If so, simply replace this command with:
execute @a[r=64,tag=!home] tag @s add "home"
Solution 2:
@Penguin's answer helped me arrive at the answer I needed so go upvote their answer!
I had a few issues with my setup. The first was that I was adding the home-title
tag before displaying the title, so all users always had the home-title
tag. Even with @Penguin's addition of the not operator !
to my logic chain, all users were still seeing the title.
I had to change the order of command execution, in addition to adding the not operator in order for it to work:
#Block 1 (Repeat, Unconditional, Always Active)
tag @a[r=64,tag=!"home"] add "home"
#Block 2 (Chain, Conditional, Always Active)
gamemode creative @a[r=75,tag="home"]
#Block 3 (Chain, Conditional, Always Active)
title @a[r=75,tag=!"home-title"] subtitle "This is a safe space."
#Block 4 (Chain, Conditional, Always Active)
title @a[r=75,tag=!"home-title"] title "Home Base"
#Block 5 (Chain, Conditional, Always Active)
tag @a[r=75,tag="home"] add "home-title"
With this setup only the players entering the area will see the title, while the players already in the area won't.