Paste #135645: chunk tracking and reading yaml

Date: 2025/08/18 17:54:40 UTC-07:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


assignplayerchunklogin:
    type: world
    debug: true
    events:
        on player login:
            - wait 2s
            #Find player's current chunk coordinates. Save them to a player flag.
            - flag player playerchunkstrx:<player.location.x.div[16].round_down>
            - flag player playerchunkstrz:<player.location.z.div[16].round_down>
            - define current_player_chunk_def_str "<player.flag[playerchunkstrx]>, <player.flag[playerchunkstrz]>"
            - flag player current_player_chunk_str:<[current_player_chunk_def_str]>

            #Assign player holding flags if they don't exist
            - if !<player.has_flag[player_domainnameflag]>:
                - flag player player_domainnameflag:null
            - if !<player.has_flag[player_baronynameflag]>:
                - flag player player_domainnameflag:null
            - if !<player.has_flag[player_countynameflag]>:
                - flag player player_countynameflag:null
            - if !<player.has_flag[player_duchynameflag]>:
                - flag player player_duchynameflag:null

            - flag player chunktrackercooldown


chunktracker:
    type: world
    events:
        after player walks flagged:chunktrackercooldown:
            - foreach <server.online_players> as:player:
                - flag player chunktrackercooldown:!

                # Find player location, translate to chunk coords by dividing by 16
                - flag player playerchunkstrx:<player.location.x.div[16].round_down>
                - flag player playerchunkstrz:<player.location.z.div[16].round_down>

                # Temporarily store calculated player chunk location
                - define new_player_chunk_temp_str "<player.flag[playerchunkstrx]>,<player.flag[playerchunkstrz]>"

                #Compare new chunk coords with stored chunk coords
                - if <[new_player_chunk_temp_str]> != <player.flag[current_player_chunk_str]>:
                    #If the new chunk is different from the old chunk, check if
                    #the player has moved into a new holding. Save the new chunk
                    #coords for next comparison.
                    - flag player current_player_chunk_str:<[new_player_chunk_temp_str]>
                    - narrate "New Chunk! <player.flag[current_player_chunk_str]>"

                    # WILDERNESS AND TITLE LOGIC
                    - define currchunk <chunk[<[new_player_chunk_temp_str]>,world4]>
                    - if <[currchunk].flag[chunk_domainnameflag]> != <player.flag[player_domainnameflag]>:
                        - flag player player_domainnameflag:<[currchunk]>.flag[chunk_domainnameflag]>
                        - title title:<gold><player.flag[player_domainnameflag]> subtitle:<&7>The<&sp><&2>Domain stay:2s targets:<[player]>
                    - if <[currchunk]>.flag[chunk_baronynameflag]> != <player.flag[player_baronynameflag]>:
                        - flag player player_baronynameflag:<[currchunk]>.flag[chunk_baronynameflag]>
                    - if <[currchunk]>.flag[chunk_countynameflag]> != <player.flag[player_countynameflag]>:
                        - flag player player_countynameflag:<[currchunk]>.flag[chunk_countynameflag]>
                    - if <[currchunk]>.flag[chunk_duchynameflag]> != <player.flag[player_duchynameflag]>:
                        - flag player player_duchynameflag:<[currchunk]>.flag[chunk_duchynameflag]>

                - wait 56t
                - flag player chunktrackercooldown

build_chunk_map_command:
  type: command
  name: buildchunkmap
  description: Reads fealty_data.yml and builds the chunk lookup map.
  usage: /buildchunkmap
  permission: denizen.buildchunkmap
  script:
    - narrate "<green>Starting chunk map build from fealty_data.yml..."
    - narrate "<yellow>This is a one-time process and may take a moment. The server will freeze during the initial load."

    - fileread path:data/regionstest.yml save:raw_file_content
    - define decoded_content <entry[raw_file_content].data.utf8_decode>
    - define parsed_yaml <[decoded_content].parse_yaml>
    - define fealty_data <[parsed_yaml].get[fealty_data]>
    - flag server fealty_data:<[fealty_data]>
    - narrate "<aqua>YAML loaded successfully. Found <[fealty_data].size> territory entries."
            
read_fealty_data:
  type: command
  name: readfealtydata
  description: Reads fealty_data.yml and reads from it.
  usage: /readfealtydata
  permission: denizen.readfealty
  script:
    - define worldname world4
    - foreach <server.flag[fealty_data]> as:holdinginfo key:holdingid:
        - define holdingname <[holdinginfo].get[name]>
        - narrate "The name of territory ID <gold><[holdingid]> <white>is <aqua><[holdingname]>."
        - define holdinglevel <[holdinginfo].get[level]>
        - if <[holdinglevel]> == domain:
            - define chunk_set <[holdinginfo].get[chunk_set]>
            - narrate "Getting Chunk Set:"
        - else:
            - define chunk_set <[holdinginfo].get[demesne_set]>
            - narrate "Getting Demesne Set:"
        - narrate "This territory contains <yellow><[chunk_set].size> <white>chunks."

        - define chunkcounter 1
        - foreach <[chunk_set]> as:chunk_coord:
            - if <[chunkcounter]> > 5:
                - foreach stop
            - define current_chunk_x <[chunk_coord].get[1]>
            - define current_chunk_z <[chunk_coord].get[2]>
            - define chunk_str "<[current_chunk_x]>,<[current_chunk_z]>"
            - narrate "Chunk <green><[chunkcounter]>: <red><[chunk_str]>"
            - define currchunk <chunk[<[chunk_str]>,world4]>

            - flag <[currchunk]> fealtyflag
            - choose <[holdinglevel]>:
                - case domain:
                    - flag <[currchunk]> chunk_domainnameflag:<[holdingname]>
                    - narrate <[currchunk].has_flag[chunk_domainnameflag]>
                - case barony:
                    - flag <[currchunk]> chunk_baronynameflag:<[holdingname]>
                - case county:
                    - flag <[currchunk]> chunk_countynameflag:<[holdingname]>
                - case duchy:
                    - flag <[currchunk]> chunk_duchynameflag:<[holdingname]>
            - define chunkcounter:++
            - wait 5t