################################################################################ # # d R e g i o n s # # # Authors: |Anthony| # Version: 0.3 # dScript Version: 0.9.8-DEV_b578 # # # Dependencies: # # - dWorldEditor # - Integrates with region selection wand # - https://github.com/AnthonyAMC/Public-Denizen-Scripts/blob/master/dWE/dWorldEditor.yml # # - MessageConstructorLibrary # - Library for messaging system. # - https://github.com/AnthonyAMC/Public-Denizen-Scripts/blob/master/MessageConstructors.yml # # - ConfigFileGenerator # - Used to build default config files and data storage. # - https://github.com/AnthonyAMC/Public-Denizen-Scripts/blob/master/ConfigFileGenerator.yml # # - Flags # - All the flags for dRegions. It is bundled in the repo releases. # - https://github.com/AnthonyAMC/Public-Denizen-Scripts/blob/master/dRegions/flags.yml # # - Commands # - All the commands for dRegions. It is bundled in the repo releases. # - https://github.com/AnthonyAMC/Public-Denizen-Scripts/blob/master/dRegions/commands.yml # #_______________________________________________________________________________ # #--- About dRegions # # dRegions is an advanced region management and world protection system written # with the Denizen Scripting Engine. Heavily inspired by WorldGuard, the goal is # to have an extremely efficient events system supporting an exhaustive set of # region flags and configuration options. dRegions offers an intuitive command # interface and provides thorough TAB completion. # # #--- Installation & Setup # # Install Flags, ConfigFileGenerator, dWorldEditor, and dRegions to your scripts # folder and reload scripts. /denizen reload scripts # # All config and data storage files will be automatically generated in your # Denizen plugin folder. /plugins/Denizen/dRegions # # #--- Permissions & Commands # # Here's a list of all the permissions and commands with a brief description # of each. More verbose usage info can be found in game. /drg help # # dRegions provides thorough TAB completion! Use this to your benefit! # # The permissions system isn't fully realized yet. Meanwhile, we have a list of # generic permissions to get you by. # # Command Permission Description # # /drg help [arg/#] dregions.help Specify a page number or command arg # /drg define dregions.define Define a region # /drg redefine dregions.redefine Update region to new selection # /drg claim dregions.claim Claim the selected region # /drg select dregions.select Select a region by id # /drg remove dregions.remove Remove a region # /drg list dregions.list List regions # /drg info dregions.info See info on a region # /drg addowner dregions.addowner Add a player or perm group as a region owner # /drg removeowner dregions.removeowner Remove a player or perm group from region owner # /drg addmember dregions.addmember Add a player or perm group as a region member # /drg removemember dregions.removemember Remove a player or perm group from region member # /drg flag dregions.flag Set region flags # /drg setpriority dregions.setpriority Set region priority # /drg setparent dregions.setparent Set region parent # /drg teleport dregions.teleport Teleport to region # /drg reload dregions.reload Reload all config files # /drg restart dregions.restart Restart dRegions for whatever reason # dregions.admin Override permission for all things dRegions # # dregions.invincible Makes the player totally invincible # dregions.invincible. Player can't be damaged by specific cause(s) # #--- Basic Usage Tutorial # # After you've gotten installed, setup, and permissions assigned (op-only mode # is fine too), you will need to give yourself a region wand. /dwe wand # # Mark your region selection using the wand as directed. # # Define your region noting any owners (player or -g group) you want # - /drg define myRegion notch herobrine -g members -g vip # # Your region is now protected! # # Set region priority # - /drg setpriority myRegion 10 # # Set any region flags you need # - /drg flag myRegion greeting Hello ! # #--- TODO # # - Make sure players can't exit a vehicle if they do not have permission to # get back into it. # - Add vehicle-enter and vehicle-exit flags and respective list flags. # - Add vehicle-placelist flag. # - Make all minecarts work with entity-interactlist flag. # - Make the player-damage flag cover the hurt command # - Fix eating in regions with the hunger flag set # # # ################################################################################ # # dRegions Version # # Handles dRegions Versioning Checks # dRegions_Version: type: version author: Anthony name: dRegions version: 0.30 description: Denizen Region Management and Protection id: 23 # # END dRegions Version #-------------------------------------- # dRegions: type: world debug: false events: on server start: - inject locally start on shutdown: - define globalCache '' - foreach { - if %globalCache% || '' { - if { - announce to_console "<&b>dRegions<&co><&3> Removing %value% cache.yml" - adjust server 'delete_file:dRegions/worlds/%value%/cache.yml' } } else { - yaml 'savefile:dRegions/worlds/%value%/cache.yml' 'id:dRegions_%value%_cache' } } on world initializes: - run locally loadYaml instantly on script reload: - run locally start instantly on player changes world: # - event 'player exits notable cuboid' 'context:cuboids||from||to|' save:exit # - if == cancelled { # - determine cancelled # } - flag dRegions.cache:! - flag dRegions.rateLimit:! on player joins: - flag dRegions.cache:! - flag dRegions.rateLimit:! on player respawns: - if { - determine passively '>' - adjust 'health:' - wait 10t - flag 'dRegions.Respawn:!' } on entity enters portal: - define world '' - define readPath 'portal.]:player||entity>-enter' - inject s@dRegions p:event_PreProc_Config-NoTarget on portal created: - define world '' - define readPath 'portal.create' - inject s@dRegions p:event_PreProc_Config-NoTarget start: - inject locally loadYaml - foreach '' { - flag server '%value%:!' } - define flags '' - flag server 'dRegions.Flags:|:%flags%' - if { - yaml unload 'id:dRegions_eventmap' } - yaml create 'id:dRegions_eventmap' - foreach '%flags%' { - define flag '%value%' - foreach { - yaml set '%value%:->:/%flag%' 'id:dRegions_eventmap' } } - yaml set 'none:!' 'id:dRegions_eventmap' - foreach '' { - define e '' - yaml set '%value%:!' 'id:dRegions_eventmap' - yaml set '%value%:|:' 'id:dRegions_eventmap' } - if { - queue q@dRegions_saveCache stop } - run locally saveCache delay:5s id:dRegions_saveCache loadYaml: # Reloads the yaml files and generates default files if they don't exist. # Rewrites config files that do not match internal version number! - announce "<&b>dRegions<&co><&3> Loading system config files..." to_console - define version '' - define world 'global' - define file 'config' - define hasFile '' - if %hasFile% { - yaml 'load:dRegions/config.yml' 'id:dRegions_global_config' - define isUpdate '' } else { - define isUpdate 'false' } - if ! || %isUpdate% { - if { - flag ConfigFileGeneratorNotify:true - inject locally createConfigFile instantly - flag ConfigFileGeneratorNotify:! - run s@msgPrefixed player: 'def:dRegions|<&7><&o> <&f><&o>%world%<&7><&o> config file!' } else { - inject locally createConfigFile } - announce "<&b>dRegions<&co> <&7><&o> <&f><&o>%world%<&7><&o> config file!" to_console } - if { - yaml unload 'id:dRegions_global_config' } - yaml 'load:dRegions/config.yml' 'id:dRegions_global_config' - foreach { - define world '' - foreach 'li@config|regions|inventories|cache' { - define this '%value%' - define file 'worlds/%world%/%this%' - define hasFile '' - if %hasFile% { - yaml 'load:dRegions/worlds/%world%/%this%.yml' 'id:dRegions_%world%_%this%' - define isUpdate '' } else { - define isUpdate 'false' } - if !%hasFile% || %isUpdate% { - if { - flag ConfigFileGeneratorNotify:true - inject locally create%this%File - flag ConfigFileGeneratorNotify:! - run s@msgPrefixed player: 'def:dRegions|<&7><&o> <&f><&o>%world%<&7><&o> %this% file!' } else { - inject locally create%this%File } - announce "<&b>dRegions<&co> <&7><&o>Created <&f><&o>%world%<&7><&o> %this% file!" to_console } - if { - yaml unload 'id:dRegions_%world%_%this%' } - yaml 'load:dRegions/worlds/%world%/%this%.yml' 'id:dRegions_%world%_%this%' } } - announce "<&b>dRegions<&co><&a> System config files Loaded!" to_console reloadYaml: # A simpler reload - announce "<&b>dRegions<&co><&3> Reloading system config files..." to_console - run s@msgPrefixed player: 'def:dRegions|<&7><&o>Reloading system config files...' - if { - yaml unload 'id:dRegions_global_config' } - yaml 'load:dRegions/config.yml' 'id:dRegions_global_config' - foreach { - define world '' - foreach 'li@config|regions|inventories|cache' { - if { - yaml unload 'id:dRegions_%world%_%value%' } - yaml 'load:dRegions/worlds/%world%/%value%.yml' 'id:dRegions_%world%_%value%' } } - announce "<&b>dRegions<&co><&a> System config files reloaded!" to_console - run s@msgPrefixed player: 'def:dRegions|<&7><&o>System config files reloaded!' createConfigFile: - define readID 'dRegions_Configurations' - define writeID 'dRegions_%world%_config' - if ! { - yaml fix_formatting 'load:' 'id:%readID%' } - if ! { - announce to_console "Loaded " } - yaml create 'id:%writeID%' - define readPath '%readID%.config' - define writePath 'config' - run s@ConfigFileGenerator def:%readID%|%writeID%|%readPath%|%writePath%|false|false| instantly - yaml unload 'id:%readID%' - yaml 'savefile:dRegions/%file%.yml' 'id:%writeID%' createRegionsFile: - define readID 'dRegions_Configurations' - define writeID 'dRegions_%world%_regions' - if ! { - yaml fix_formatting 'load:' 'id:%readID%' } - yaml create 'id:%writeID%' - define readPath '%readID%.regions.__global__' - define writePath 'regions.%region%' - run s@ConfigFileGenerator def:%readID%|%writeID%|%readPath%|%writePath%|false|false|false instantly - yaml unload 'id:%readID%' - yaml 'savefile:dRegions/%file%.yml' 'id:%writeID%' createInventoriesFile: - define readID 'dRegions_Configurations' - define writeID 'dRegions_%world%_inventories' - if ! { - yaml fix_formatting 'load:' 'id:%readID%' } - yaml create 'id:%writeID%' - define readPath '%readID%.inventories' - define writePath 'inventories' - run s@ConfigFileGenerator def:%readID%|%writeID%|%readPath%|%writePath%|false|false|false instantly - yaml unload 'id:%readID%' - yaml 'savefile:dRegions/%file%.yml' 'id:%writeID%' createRegionEntry: - if ! { yaml 'load:dRegions/worlds/%world%/regions.yml' 'id:dRegions_%world%_regions' } - yaml set 'regions.%name%.type:cuboid' 'id:dRegions_%world%_regions' - yaml set 'regions.%name%.min:' 'id:dRegions_%world%_regions' - yaml set 'regions.%name%.max:' 'id:dRegions_%world%_regions' - yaml set 'regions.%name%.priority:0' 'id:dRegions_%world%_regions' - yaml set 'regions.%name%.flags:|:' 'id:dRegions_%world%_regions' - yaml set 'regions.%name%.owners:|:' 'id:dRegions_%world%_regions' - foreach { - yaml set 'regions.%name%.owners.groups:->:%value%' 'id:dRegions_%world%_regions' } - foreach { - yaml set 'regions.%name%.owners.players:->:%value%' 'id:dRegions_%world%_regions' } - yaml set 'regions.%name%.members:|:' 'id:dRegions_%world%_regions' - yaml 'savefile:dRegions/worlds/%world%/regions.yml' 'id:dRegions_%world%_regions' - note cu@| 'as:dregions_%world%_%name%' createCacheFile: - define readID 'dRegions_Configurations' - define writeID 'dRegions_%world%_cache' - if ! { - yaml fix_formatting 'load:' 'id:%readID%' } - yaml create 'id:%writeID%' - define readPath '%readID%.cache' - define writePath 'cache' - run s@ConfigFileGenerator def:%readID%|%writeID%|%readPath%|%writePath%|false|false| instantly - yaml unload 'id:%readID%' - yaml 'savefile:dRegions/%file%.yml' 'id:%writeID%' clearCache: - ^define region '%1%' - ^define world '%2%' - ^define flag '%3%' - ^define type '' - ^if '%type%' == 'list' { - define type '' - define flag '' } - ^define children '' - ^foreach '': - yaml set 'cache.%type%.%value%.%flag%:!' 'id:dRegions_%world%_cache' - ^yaml 'savefile:dRegions/worlds/%world%/cache.yml' 'id:dRegions_%world%_cache' saveCache: - while 'true': - wait 5m - foreach '': - if ! { - yaml 'load:dRegions/worlds/%value%/cache.yml' 'id:dRegions_%value%_cache' } - yaml 'savefile:dRegions/worlds/%value%/cache.yml' 'id:dRegions_%value%_cache' # Event Preprocessors # # This pre-processor handles events in the global and world config files before # any regions even get a chance. World configs are processed before global. # This way worlds can deny events that global allows, but global has ultimate # control for denying events. Denying an event takes precedence over allowing. # Default is 'true' on most events for this reason. # # Events that take a block list are handled here as well. Blocklists can # operate in whitelist or blacklist modes. # # Blacklist mode. # When an event is set to 'false' and no blocks are specified in the # blocklist, it will always cancel the event. If there are blocks specified, # it will only cancel events involving those blocks listed. # # Whitelist mode. # When an event is set to 'true' and no blocks are specified in the blocklist, # it will always allow the event. If there are blocks specifed, it will only # allow events involving those blocks listed. # event_PreProc_Config: - define targetList '' # - if ']:]>||]>>' { # - determine cancelled # } - if '' { - if '' && '%targetList%' !contains '%target%' { - determine cancelled } } else { - if '' || '%targetList%' contains '%target%' { - determine cancelled } } - define targetList '' # - if ']:]>||]>>' { # - determine cancelled # } - if '' { - if '' && '%targetList%' !contains '%target%' { - determine cancelled } } else { - if '' || '%targetList%' contains '%target%' { - determine cancelled } } event_PreProc_Config-NoTarget: - if || { - determine cancelled } # # # # ################################################################################ # # Player/Entity Events # dRegions_Events_Player_Interact_Entity: type: world debug: false eventHooks: player_interact_entity events: on player right clicks entity: - if || || == item_frame { - queue clear } - if || { - queue clear } - define player '' - define object '' - define target '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Interact_NPC: type: world debug: false eventHooks: player_interact_npc events: on player right clicks npc: - if || { - queue clear } - define player '' - define object '' - define target '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Enters_Region: type: world debug: false eventHooks: player_enters_region events: on player enters notable cuboid: - if || { - define noCancel '' } - define player '' # Should we fire an event when the player exits the global region? - if { - event 'player exits notable cuboid' 'player:%player%' 'context:cuboids||from||to|' save:exit - if == cancelled { - determine cancelled } } - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' # Ignore crossing into lower priority region and non-dRegion cuboids - define oldRegions 'li@/__global__' - foreach '': - define oldRegions '%oldRegions%|/%value%' - if '' == '' { - queue clear } - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' - event 'player entered dregion' 'player:%player%' 'context:orderedregions||to||from|' dRegions_Events_Player_Entered_dRegion: type: world debug: false eventHooks: player_entered_dregion events: on player entered dregion: - define player '' - define eLoc '' - define world '' - define orderedRegions '' - define noCancel '' - define isEnter 'true' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Exits_Region: type: world debug: false eventHooks: player_exits_region events: on player exits notable cuboid: - if || { - define noCancel '' } - define player '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' # Ignore crossing into lower priority region and non-dRegion cuboids - define newRegions 'li@/__global__' - foreach '': - define newRegions '%newRegions%|/%value%' - if '' == '' { - queue clear } - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' # Should we fire an event when the player enters the global region? - if { - event 'player enters notable cuboid' 'player:%player%' 'context:cuboids||from||to|' save:enter - if == cancelled { - determine cancelled } } # Should exiting a region trigger entering another one. This can happen when regions overlap # - event 'player enters notable cuboid' 'context:cuboids||from||to|' save:enter # - if { # - determine cancelled # } - event 'player exited dregion' 'player:%player%' 'context:orderedregions||to||from|' dRegions_Events_Player_Exited_dRegion: type: world debug: false eventHooks: player_exited_dregion events: on player exited dregion: - define player '' - define eLoc '' - define world '' - define orderedRegions '' - define noCancel '' - define isEnter 'false' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Place_Block: type: world debug: false eventHooks: player_place_block events: on player places block: - if || { - queue clear } - define player '' - define target '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Break_Block: type: world debug: false eventHooks: player_break_block events: on player breaks block: - if || { - queue clear } - define player '' - define target '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Right_Click: type: world debug: false # eventHooks: These are mapped in s@dRegions_Map_Interactions events: on player right clicks: - if || { - queue clear } - define target '' - define item '' - define eventObj '' # - define event ']:||>' - if '' contains '%item%' { - define event '' } else { - define event '' } - if '%event%' == 'null' { - queue clear } - define player '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Damaged: type: world debug: false eventHooks: player_damaged events: on player damaged: - if ( || ]||false> ) && ! { - adjust 'fire_time:0' - determine cancelled } - define player '' - define target '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Chat: type: world debug: false eventHooks: player_chats events: on player chats: - if || { - queue clear } - define player '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Break_Vehicle: type: world debug: false eventHooks: player_break_vehicle events: on player destroys vehicle: - if || { - queue clear } - define player '' - define object '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Place_Boat: type: world debug: false eventHooks: player_place_vehicle events: on player right clicks block with boat: - if || { - queue clear } - define player '' - define object '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Stands_On: type: world debug: false eventHooks: player_interact_switches events: on player stands on: - if || { - queue clear } - define player '' - define target '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Throws_Potion: type: world debug: false eventHooks: player_throw_potion events: on player right clicks with potion: - if ! || || { - queue clear } - define player '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Drinks_Potion: type: world debug: false eventHooks: player_throw_potion events: on player consumes potion: - if || { - queue clear } - define player '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Place_Armorstand: type: world debug: false eventHooks: player_place_armorstand events: on player right clicks block with armor_stand: - if || { - queue clear } - define player '' - define target '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Use_Monsteregg: type: world debug: false eventHooks: player_use_spawnegg events: on player right clicks block with monster_egg: - if || { - queue clear } - define player '' - define target '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Throw_Egg: type: world debug: false eventHooks: player_throw_hatchingegg|player_throw_egg events: on player throws egg: - if || { - queue clear } - define player '' - define object '' - define eLoc '' - define world '' - if { - define type 'hatchingegg' } else { - define type 'egg' } - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' # - foreach ']:hatchingegg||egg>]||li@>': - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Enters_Bed: type: world debug: false eventHooks: player_enters_bed events: on player enters bed: - if || { - queue clear } - define player '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Empties_Bucket: type: world debug: false eventHooks: player_empty_bucket|build events: on player empties bucket: - if || { - queue clear } - define player '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Fills_Bucket: type: world debug: false eventHooks: player_fill_bucket|build events: on player fills bucket: - if || { - queue clear } - define player '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Drops_Item: type: world debug: false eventHooks: player_drops_item events: on player drops item: - if || { - queue clear } - define player '' - define object '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Pickup_Item: type: world debug: false eventHooks: player_pickup_item events: on player picks up item: - if || { - queue clear } - define player '' - define object '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Place_Hanging: type: world debug: false eventHooks: player_place_hanging events: on player places hanging: - if || { - queue clear } - define player '' - define object '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Break_Hanging: type: world debug: false eventHooks: player_break_hanging events: on player breaks hanging: - if || { - queue clear } - define player '' - define object '' - define object '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Interact_Armorstand: type: world debug: false eventHooks: player_interact_armorstand events: on player right clicks at armor_stand: - if || { - queue clear } - define player '' - define object '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Interact_Itemframe: type: world debug: false eventHooks: player_interact_itemframe events: on player right clicks item_frame: - if || { - queue clear } - define player '' - define object '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Extinguish_BlockFire: type: world debug: false eventHooks: player_extinguish_blockfire events: on player left clicks block: - if != fire { - queue clear } - if || { - queue clear } - define player '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Use_Bonemeal: type: world debug: false eventHooks: player_use_bonemeal events: on player clicks block with bone_meal: - if || { - queue clear } - define player '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Changes_Foodlevel: type: world debug: false eventHooks: player_change_foodlevel events: on player changes food level: - if >= queue clear - define player '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Player_Teleports: type: world debug: false eventHooks: player_teleports|player_use_enderpearl events: on player teleports: - if || { - queue clear } # This is here to catch teleports between global regions as there's no other event for it. Maybe it should be in its own container idk. - if '' != '' { - if && { - event 'player enters notable cuboid' 'context:cuboids||from||to|' save:enter - if == cancelled { - determine cancelled } } } - if != ender_pearl queue clear - define player '' - define eLoc '' - define world '' - define cuboids '].deduplicate>' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Entity_Spawn: type: world debug: false eventHooks: entity_spawn events: on entity spawns: - define object '' - define target '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Entity_Damage_Entity: type: world debug: false eventHooks: player_damage_player|player_damage_entity|player_damage_npc|player_damage_armorstand|player_damage_itemframe|entity_damage_entity|entity_damage_player|entity_damage_npc|entity_damage_armorstand|entity_damage_itemframe|npc_damage_npc|npc_damage_player|npc_damage_entity|npc_damage_itemframe|npc_damage_armorstand events: on entity damages entity: - if ! || ! { - queue clear } # - define atype ']:npc||>' - if { - define atype 'npc' } else { - define atype '' } # - define dtype ']:npc||]>]:||>>' - if { - define dtype 'npc' } else if == armor_stand { - define dtype 'armorstand' } else if == item_frame { - define dtype 'itemframe' } else { - define dtype '' } - define attacker '' - define defender '' - define world '' - define orderedRegions 'li@/__global__' - foreach '].deduplicate.filter[starts_with[cu@dregions_%world%]].parse[after[cu@dregions_%world%_]]>': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - define object ']>' - define player ']>' - define target '' - define eLoc '' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Entity_Target_Entity: type: world debug: false eventHooks: entity_target_entity|entity_target_player|entity_target_npc|entity_target_armorstand|entity_target_itemframe|npc_target_npc|npc_target_player|npc_target_entity|npc_target_itemframe|npc_target_armorstand events: on entity targets entity: # - define atype ']:npc||>' - if ! || ! { - queue clear } - if { - define atype 'npc' } else { - define atype '' } # - define dtype ']:npc||]>]:||>>' - if { - define dtype 'npc' } else if == armor_stand { - define dtype 'armorstand' } else if == item_frame { - define dtype 'itemframe' } else { - define dtype '' } - define attacker '' - define defender '' - define world '' - define orderedRegions 'li@/__global__' - foreach '].deduplicate.filter[starts_with[cu@dregions_%world%]].parse[after[cu@dregions_%world%_]]>': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - define object ']>' - define player ']>' - define target '' - define eLoc '' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Entity_Explode: type: world debug: false events: on entity explodes: - define readPath 'entity.explode' - define target '' - define eLoc '' - define world '' - inject s@dRegions p:event_PreProc_Config - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Entity_Change_Block: type: world debug: false events: on entity changes block: # Maybe we want to check block changes here for explosions? # It's currently disabled because even if the explosion is cancelled, the block # change event(s) still fire (yes, one explosion can have multiple block changes) - if == soil || li@falling_block|creeper|primed_tnt contains { - queue clear } - if queue clear - if { - if { - queue clear } - determine cancelled } - define object '' - define target '' - define eLoc '' - define world '' - define readPath 'entity.changeBlock' - inject s@dRegions p:event_PreProc_Config - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Fallingblock_Change_Block: type: world debug: false eventHooks: falling_sand|falling_gravel events: on falling_block changes block: - if queue clear - if { - if { - queue clear } - determine cancelled } - define mat '' - if li@sand|gravel !contains %mat% queue clear - define eLoc '' - define world '' - define readPath 'physics.%mat%' - inject s@dRegions p:event_PreProc_Config-NoTarget - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Entity_Form_Block: type: world debug: false events: on entity forms block: - if { - if { - queue clear } - determine cancelled } - define readPath 'entity.changeBlock' - define object '' - define target '' - define eLoc '' - define world '' - inject s@dRegions p:event_PreProc_Config - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' # Handles 3 events: npc_dies entity_dies player_dies dRegions_Events_Entity_Dies: type: world debug: false eventHooks: npc_dies|entity_dies|player_dies events: on entity dies: # - define target ']:npc||>' - if { - define target 'npc' } else { - define target '' } # - define player ']:||null>' - if '%target%' == 'Player' { - define player '' } else { - define player 'null' } - define object '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Entity_Trample_Crops: type: world debug: false eventHooks: entity_trample_crops|player_trample_crops events: on entity changes soil: - define eLoc '' - define world '' - define type '' - define readPath 'trample-crops.%type%' - inject s@dRegions p:event_PreProc_Config-NoTarget - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Entity_Break_Hanging: type: world debug: false eventHooks: entity_break_itemframe|entity_break_painting events: on entity breaks hanging: - if == player { - queue clear } - define eLoc '' - define world '' - define type '' - define readPath 'entity-break-%type%' - inject s@dRegions p:event_PreProc_Config-NoTarget - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' # ################################################################################ # # World Events # dRegions_Events_Block_Ignites: type: world debug: false eventHooks: lava_fire|fire_spread events: on block ignites: - define eLoc '' - define world '' - define target '' - define readPath 'fire.' - choose '': - case 'ENDER_CRYSTAL': - define entity '' - inject s@dRegions p:event_PreProc_Config-NoTarget - case 'EXPLOSION': - define entity '' - inject s@dRegions p:event_PreProc_Config-NoTarget - case 'FIREBALL': - define entity '' - inject s@dRegions p:event_PreProc_Config-NoTarget - case 'FLINT_AND_STEEL': - define player '' - if || { - queue clear } - inject s@dRegions p:event_PreProc_Config-NoTarget - case 'LAVA': - inject s@dRegions p:event_PreProc_Config - case 'SPREAD': - inject s@dRegions p:event_PreProc_Config - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach ']||li@>': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Block_Burns: type: world debug: false eventHooks: block_burns events: on block burns: - define eLoc '' - define world '' - define target '' - define readPath 'fire.destroyBlocks' - inject s@dRegions p:event_PreProc_Config - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Ice_Forms: type: world debug: false eventHooks: blockform_ice events: on ice forms: - define eLoc '' - define world '' - define readPath 'blockform.ice' - inject s@dRegions p:event_PreProc_Config-NoTarget - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Snow_Form: type: world debug: false eventHooks: blockform_snow events: on snow forms: - define cub 'cu@|' - if ! { - queue clear } - define eLoc '' - define world '' - define target '' - define readPath 'blockform.snow' - inject s@dRegions p:event_PreProc_Config - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Soil_Fades: type: world debug: false eventHooks: blockfade_soil events: on soil fades: - define eLoc '' - define world '' - define readPath 'blockfade.soil' - inject s@dRegions p:event_PreProc_Config-NoTarget - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Ice_Fades: type: world debug: false eventHooks: blockfade_ice events: on ice fades: - define eLoc '' - define world '' - define readPath 'blockfade.ice' - inject s@dRegions p:event_PreProc_Config-NoTarget - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Snow_Fades: type: world debug: false eventHooks: blockfade_snow events: on snow fades: - define eLoc '' - define world '' - define readPath 'blockfade.snow' - inject s@dRegions p:event_PreProc_Config-NoTarget - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Block_Spread: type: world debug: false eventHooks: blockspread_grass|blockspread_mycel|blockspread_mushroom|blockspread_vines events: on block spreads: - define mat '' - if li@grass|mycel|mushroom|vines !contains %mat% queue clear - define eLoc '' - define world '' - define readPath 'spread.%mat%' - inject s@dRegions p:event_PreProc_Config-NoTarget - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Liquid_Spread: type: world debug: false eventHooks: water_spreads|lava_spreads events: on liquid spreads: - if '' == '' queue clear - define mat '' - if li@water|lava !contains %mat% queue clear - define eLoc '' - define target '' - define world '' - define readPath 'spread.%mat%' - inject s@dRegions p:event_PreProc_Config - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' # Block liquid from crossing region borders - if '' != '' { - define regionPri 'li@/__global__' - foreach '' { - define regionPri '%regionPri%|/%value%' } - if '' != '' { - determine cancelled } } - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Lightning_Strikes: type: world debug: false eventHooks: lightning_strikes events: on lightning strikes: - define eLoc '' - define world '' - define target '' - define readPath 'lightning-strike' - inject s@dRegions p:event_PreProc_Config - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Leaf_Decay: type: world debug: false eventHooks: blockfade_leaves events: on leaves decay: - define eLoc '' - define world '' - define readPath 'blockfade.leaves' - inject s@dRegions p:event_PreProc_Config-NoTarget - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' # Was testing an alternate method. It took an average of 1ms longer :/ # - define ftype '' # - define cache 'yaml<&lb>dRegions_%world%_cache<&rb>.read<&lb>cache.%ftype%.]].parse[replace[regex:$].with[.%flag%<&rb>||null<>>]]>>' # - define cache '' # - if == '0' { # - inject 's@dRegions_Flags_Processors' 'p:%ftype%' # - foreach next # } # - define cache '' # - if '%cache%' { # - if '' contains 'event-allowed' { # - inject 's@dRegions_Flag_%flag%' 'p:event-allowed' # } # - foreach next # } # - if '' contains 'event-cancelled' { # - inject 's@dRegions_Flag_%flag%' 'p:event-cancelled' # } # - if { # - foreach next # - queue clear # } # - determine cancelled dRegions_Events_Potion_Splash: type: world debug: false eventHooks: potion_splash events: on potion splash: - define player 'null' - define eLoc '' - define cuboids '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Pistons: type: world debug: false eventHooks: piston_extend|piston_retract events: on piston extends: # - define lastBlock ']:||].add[]>>' - if == 0 { - define lastBlock } else { - define lastBlock ].add[]> } - define eLoc '' - define world '' - define originRegions 'li@/__global__' - foreach '': - define originRegions '%originRegions%|/%value%' - define originRegions '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' # Block piston blocks from crossing region borders - if '' != '' { - determine cancelled } - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' on piston retracts: # - define lastBlock ']:||].add[]>>' - if == 0 { - define lastBlock } else { - define lastBlock ].add[]> } - define eLoc '' - define world '' - define originRegions 'li@/__global__' - foreach '': - define originRegions '%originRegions%|/%value%' - define originRegions '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' # Block piston blocks from crossing region borders - if '' != '' { - determine cancelled } - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' dRegions_Events_Issue_Command: type: world debug: false eventHooks: player_command|server_command events: on command: # - define type ']:server||player>' - define target ' ' - define target '' - define delimiter ' ; ' - if { - define type 'server' - goto 'FLAGS' } - define type 'player' - define player '' - define eLoc '' - define world '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - mark 'FLAGS' - foreach '': - define flag '%value%' - inject 's@dRegions_Flags_Processors' 'p:' # ################################################################################ # # dRegions Other Utilities # # Other Utility functions used throughout dRegions # #-------------------------------------- # dRegions_GetInheritedFlag: # Get a region flag value. Start at current child and ascend through parents # until a value is set or you reach the origin ancestor. # Since this method is shared by highestOnly and orderedRegions lookups we can not return the default flag value. # Doing so would interfere with the orderedRegions lookup. Flag processors are responsible for looking up defaults # after they have traversed all applicable regions. # type: procedure definitions: world|region|flag debug: false script: - define return '' - while '': - if { - define region '' - define return '' - while next } - while stop - determine '%return%' # - determine ']:%return%||]:global||region>Default]||none>>' # - if %return% == 'none' { # - if %region% == '__global__' { # - determine '' # } # - determine '' # } #-------------------------------------- # dRegions_FlagLookup_H: # Get a flag value at a location. For use with flags that set highestOnly. # If the location does not set the flag value, lookup the default set in the flagscript. # type: procedure definitions: flag|loc debug: false script: - define w '' # - define orderedRegions '/__global__]>' # - define orderedRegions '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - define region '' - define return '' - define child '%region%' - while '': - if { - define child '' - define return '' } else { - while stop } - if '%return%' == 'none' { - if '%region%' == '__global__' { - determine '/%region%' } - determine '/%region%' } - determine '%return%/%region%' # #--------------------------------------- # dRegions_FlagLookup_O: # Get a flag value at a location. For use with flags that traverse orderedRegions. # If the location does not set the flag value, lookup the default set in the flagscript. # type: procedure definitions: flag|loc debug: false script: - define w '' # - define orderedRegions '/__global__]>' # - define orderedRegions '' - define orderedRegions 'li@/__global__' - foreach '': - define orderedRegions '%orderedRegions%|/%value%' - define orderedRegions '' - foreach '%orderedRegions%': - define region '%value%' - define return '' - define child '%region%' - while '': - if { - define child '' - define return '' } else { - while stop } - if '%return%' != 'none' { - foreach stop } - if '%return%' == 'none' { - if '%region%' == '__global__' { - determine '/%region%' } - determine '/%region%' } - determine '%return%/%region%' # #--------------------------------------- # dRegions_PlayerMatchRegionGroup: # Check if a player matches a region flag group setting. # type: procedure definitions: group|region|world|player debug: false script: - define playerUUID '' - define playerGroups '' - choose '%group%': - case 'all': - determine 'true' - case 'members': # - determine '' - if || { - determine 'true' } - while '': - define region '' - if || { - determine 'true' } - determine 'false' - case 'nonmembers': # - determine '].not>' - if || || || { - determine 'false' } - while '': - define region '' - if || || || { - determine 'false' } - determine 'true' - case 'owners': # - determine '' - if || { - determine 'true' } - while '': - define region '' - if || { - determine 'true' } - determine 'false' - case 'nonowners': # - determine '' - if || { - determine 'false' } - while '': - define region '' - if || { - determine 'false' } - determine 'true' # #--------------------------------------- # dRegions_IsOwner: # A procedure script to check if a player is a region owner # type: procedure definitions: region|world|player debug: false script: - define playerUUID '' - define playerGroups '' - if || { - determine 'true' } # Regions inherit members and owners. - while '': - define region '' - if || { - determine 'true' } - determine 'false' # #--------------------------------------- # dRegions_IsMember: # A procedure script to check if a player is a region member # type: procedure definitions: region|world|player debug: false script: - define playerUUID '' - define playerGroups '' - if || { - determine 'true' } # Regions inherit members and owners. - while '': - define region '' - if || { - determine 'true' } - determine 'false' # #-------------------------------------- # # Command Permission Check Procedure script # # Used to check if a player has permission to use a command. # # I have to think about this more... # # A procedure script to check if a player has any of the required permissions for a command # # # dRegions_HasPerm_Command: type: procedure debug: false definitions: command|player|region|option script: - if == null { - if { - determine true } else { - determine false } } - if %option% == null { - inject locally permCheck } else { - inject locally permCheck-%command% } permCheck: - narrate "permCheck " - if || { - determine true } - define perms "" - foreach %perms% { - define perm '' - if { - determine true } } - determine false permCheck-flag: - define flag '%option%' - narrate "permCheck-flag >" - if || { - determine true } - define perms "" - foreach %perms% { - define perm '' - narrate " %perm%" - if { - determine true } } - determine false # #--------------------------------------- # dRegions_RegionSort: # An attempt to sort regions by priority. The existing method is faster. # Keeping for reference and lulz. type: procedure definitions: region1|region2 debug: false script: - define region1pri '' - define region2pri '' - if %region1pri% > %region2pri% { - determine -1 } - if %region1pri% < %region2pri% { - determine 1 } - if %region1pri% == %region2pri% { - determine 0 } # #--------------------------------------- # dRegions_RegionExists: # A procedure script to check if a region exists # type: procedure definitions: region|world debug: false script: - if %region% == '__global__' { - determine true } # - define notables '' - define notables '' - define regions '' - if %notables% && %regions% { - determine false } else if %notables% || %regions% { - determine orphan } else { - determine true } # #--------------------------------------- # dRegions_HighestPriority: # Used sparingly in some commands. Events implement this method directly. # Filter a list of regions by priority in descending order # type: procedure definitions: world|regions debug: false script: - define regions '' - define regionPri 'li@' - foreach %regions% { - define regionPri '%regionPri%/%value%|' } - determine '' # #--------------------------------------- # dRegions_RegionOverlaps: # A procedure script to check if a region overlaps other (un)owned regions # |%name%|%world%|]> # NOTE: If for some reason the selected cuboid overlaps an unowned region that is a lower priority than # a region that the player does own and is completely within, it will not be considered as an overlap! # - But why would there be a lower priority region inside a higher priority region... that's not # how priorities should be used! type: procedure definitions: selectedCuboid|world|player debug: false script: - define selectedCuboid '' - define regions '' - define notables '' - define overlaps ']].parse[replace[cu@dregions_%world%_]]||li@>' - define orderedRegions ']||li@>' - foreach '%orderedRegions%': - if ].not> { - determine true } - if ]> { - determine false } # By this point, we've determined that the player either owns all the regions at this cuboid location # or that the new cuboid is completely within a region that he does own. - determine false # #--------------------------------------- # dRegions_CuboidIsWithinCuboid: # Not used anywhere since Denizen implemented its own which is faster. # Keeping for reference. # Checks if one cuboid is completely within another cuboid # type: procedure definitions: inner|outer debug: false script: - define innerCuboid '' - define outerCuboid '' - if ]> && ]> && ]> && ]> && ]> && ]> { - determine true } else { - determine false } # #--------------------------------------- # dRegions_CanUse_Block: # Not used internally. It's intended as part of an API for external scripts. # Procedure script to determine if a player can use a block at a location. # Will work for any block that can be interacted with (chests, doors, levers, etc.) # type: procedure debug: false definitions: player|location script: - define world '' - define target '' - define FlagScript '' - define flag '' - if %flag% == null determine false - if > determine true - define flag-targetList '' - if { - inject locally check-global - determine 'true' - queue clear } - define regionPri 'li@' - foreach { - define regionPri '%regionPri%/%value%|' } - define orderedRegions '' - inject locally check-region - determine 'true' check-global: - define flagObj '' - if %flagObj% == null { - define flagObj '' } - if %flagObj% != none { - if == allow { - if !|__global__|%world%|%player%]> { # - inject %FlagScript% p:event-cleanup - determine false } - define targetList '' - if ( %targetList% != li@null ) && ( %targetList% != li@all ) && ( %targetList% !contains %target% ) { # - inject %FlagScript% p:event-cleanup - determine false } } else { - if |__global__|%world%|%player%]> { - define targetList '' - if ( %targetList% == li@null ) || ( %targetList% == li@all ) || ( %targetList% contains %target% ) { # - inject %FlagScript% p:event-cleanup - determine false } } } } check-region: - if { - define region '' - define flagObj '' } else { - foreach %orderedRegions% { - define flagObj '' - define region '%value%' - if %flagObj% != null { - foreach stop } } } - if %flagObj% == null { - define flagObj '' } - if %flagObj% != none { - if == allow { - if !||%world%|%player%]> { # - inject %FlagScript% p:event-cleanup - determine false } - define targetList '' - if ( %targetList% != li@null ) && ( %targetList% != li@all ) && ( %targetList% !contains %target% ) { # - inject %FlagScript% p:event-cleanup - determine false } } else { - if ||%world%|%player%]> { - define targetList '' - if ( %targetList% == li@null ) || ( %targetList% == li@all ) || ( %targetList% contains %target% ) { # - inject %FlagScript% p:event-cleanup - determine false } } } } # #--------------------------------------- # dRegions_getRelativeLocation: # Not used anywhere, but still fun to look at, though totally bonkers. # A procedure script to get a location relative to another location. # Specify the direction as n s e w u d # type: procedure definitions: l|d|n debug: false n_math: sub n_coord: '0,0,' s_math: add s_coord: '0,0,' w_math: sub w_coord: ',0,0' e_math: add e_coord: ',0,0' d_math: sub d_coord: '0,,0' u_math: add u_coord: '0,,0' script: - define math '' - define coord '' - determine "" # #--------------------------------------- # dRegions_LineWrap: # This should mostly be unused since # exists in MessageConstructorLibrary # Turn a long string into a list of smaller strings type: procedure definitions: string|targetLen debug: false script: - define stringLen '' - if { - define lines 'li@' - while { - define low '' - define hi '].as_int||%targetLen%>' - define pass '' - if { - define lines '>' - while stop } else { - define brake ']>]:]>||>' # - define brake '' - define increment '' - define passtrim ']:%brake%||>]>' - define lines '>' - define stringLen '' } - if { - while stop } } - determine '' } else { - determine '' } # # END other utilities #-------------------------------------- # # dRegions author banner items # # Banner items representing the authors # dRegions_Author_Anthony: type: item debug: false material: i@human_skull display name: "<&f> |Anthony|" lore: - <&7> Owner<&co> <&e>M<&6>ine<&e>C<&6>onomy <&e>N<&6>etwork - <&5>------------------------- - <&7> - <&7> I\<&sq>ve been playing minecraft - <&7> and running a server since - <&7> 2010. I have fun and share - <&7> what I do. - <&7> - <&9> Click To Visit # # END dRegions author banner items #------------------------------------------------------------------------------- # # dRegions Interaction Mapping # # Mapping eventHooks to right clicks # dRegions_Map_Interactions: type: yaml data debug: false block: # Containers chest: player_interact_container ender_chest: player_interact_container locked_chest: player_interact_container trapped_chest: player_interact_container dispenser: player_interact_container hopper: player_interact_container dropper: player_interact_container # Doors trap_door: player_interact_door iron_trapdoor: player_interact_door wooden_door: player_interact_door iron_door_block: player_interact_door spruce_door: player_interact_door birch_door: player_interact_door jungle_door: player_interact_door dark_oak_door: player_interact_door acacia_door: player_interact_door fence_gate: player_interact_door spruce_fence_gate: player_interact_door birch_fence_gate: player_interact_door jungle_fence_gate: player_interact_door dark_oak_fence_gate: player_interact_door acacia_fence_gate: player_interact_door # Switches lever: player_interact_switches wood_button: player_interact_switches stone_button: player_interact_switches wood_plate: player_interact_switches stone_plate: player_interact_switches iron_plate: player_interact_switches gold_plate: player_interact_switches # Utility Blocks workbench: player_interact_utilityBlocks furnace: player_interact_utilityBlocks burning_furnace: player_interact_utilityBlocks brewing_stand: player_interact_utilityBlocks enchantment_table: player_interact_utilityBlocks anvil: player_interact_utilityBlocks beacon: player_interact_utilityBlocks jukebox: player_interact_utilityBlocks note_block: player_interact_utilityBlocks # cauldron: useUtility # tnt: useUtility # Other blocks that change when clicked regardless of item in hand flower_pot: player_interact_blocks cake_block: player_interact_blocks diode_block_on: player_interact_blocks diode_block_off: player_interact_blocks redstone_comparator_off: player_interact_blocks redstone_comparator_on: player_interact_blocks block_withItem: # jukebox: player_interact_utilityBlocks/air/gold_record|green_record|record_3|record_4|record_5|record_6|record_7|record_8|record_9|record_10|record_11|record_12 cauldron: player_interact_utilityBlocks/bucket|water_bucket|glass_bottle tnt: player_interact_utilityBlocks/flint_and_steel activator_rail: player_place_vehicle/minecart|storage_minecart|powered_minecart|explosive_minecart|hopper_minecart|command_minecart detector_rail: player_place_vehicle/minecart|storage_minecart|powered_minecart|explosive_minecart|hopper_minecart|command_minecart powered_rail: player_place_vehicle/minecart|storage_minecart|powered_minecart|explosive_minecart|hopper_minecart|command_minecart rails: player_place_vehicle/minecart|storage_minecart|powered_minecart|explosive_minecart|hopper_minecart|command_minecart stationary_water: player_place_vehicle/boat water: player_place_vehicle/boat mob_spawner: player_interact_blocks/monster_egg item: gold_record: jukebox glass_bottle: cauldron flint_and_steel: tnt dye_colors: black: 0 red: 1 green: 2 brown: 3 blue: 4 purple: 5 cyan: 6 silver: 7 gray: 8 pink: 9 lime: 10 yellow: 11 light_blue: 12 magenta: 13 orange: 14 white: 15 # # END dRegions Interaction Mapping #-------------------------------------- # ################################################################################ # # # Configuration Files # # # # These are the default config files. They will be used to build the default # # configuration and data storage files. # # # #______________________________________________________________________________# # # #______________________________DO_NOT_EDIT_THIS_DATA___________________________# #______________________________________________________________________________# dRegions_Configurations: type: yaml data config: version: 0.28 clear_cache_on_restart: false regions: enable: true invincibility-removes-mobs: false invincibility-confuses-mobs: false wand: dWE_Wand ownerOnDefine: false claim: max-volume: 0 only-inside-existing-regions: true max-region-count-per-player: default: 7 spread: water: true water-list: [] lava: true lava-list: [] mycel: true grass: true mushroom: true vines: true physics: gravel: true sand: true portal: create: true entity-enter: true player-enter: true fire: ender_crystal: true explosion: true fireball: true flint_and_steel: true lava: true spread: true spread-list: [] destroyBlocks: true destroyBlocks-list: [] entity: changeBlocks: true changeBlocks-list: [] explode: true explode-list: [] entity-break-item_frame: true entity-break-painting: true blockform: ice: true snow: true snow-list: [] blockfade: ice: true snow: true leaves: true lightning-strike: true lightning-strike-list: [] trample-crops: player: true entity: true player-damage: true player-damage-list: [] # auto-invincible: false # protection: # item-durability: true # remove-infinite-stacks: false # disable-xp-orb-drops: false # disable-obsidian-generators: true # weather: # prevent-lightning-strike-blocks: [] # disable-lightning-strike-fire: false # disable-thunderstorm: false # disable-weather: false # disable-pig-zombification: false # disable-powered-creepers: false # always-raining: false # always-thundering: false regions: __global__: type: global priority: 0 flags: [] owners: [] members: [] inventories: info: - This is the inventory save file. - DO NOT EDIT! example: region: entry: kit: equip: [] inv: [] players: player: equip: [] inv: [] exit: players: player: equip: [] inv: [] cache: boolean: [] state-withGroup: [] state-withTarget: [] state-withTarget-withGroup: [] state-withTargetString-withGroup: [] info: - This is the cache file. We use this file to cache individual specific events so that we can reduce the number of flag lookups later on. - Expect it to grow to a considerable size! # #################################################################################