Skip to content
This repository has been archived by the owner on Apr 3, 2024. It is now read-only.

Routine: Switch

ricochet1k edited this page Sep 4, 2012 · 2 revisions

Collects large batches of if routines into one simple switch routine.

Syntax

- 'switch[all] {first part of conditional}':
    - '{second part}':
        - 'your routines here'
    - '{different second part}':
        - 'more routines here'
    etc.

Explanation

The switch routine can be used to replace many nearly-identical if routines in a row with just one switch. The benefits of doing this are a little bit less repetition, and a small speed gain. To show why this happens, let's say you have the following switch:

- 'switch attacker.wielding':
    - 'WOOD_SWORD': '+3'
    - 'STONE_SWORD': '+5'
    - 'IRON_SWORD': '+7'
    - 'DIAMOND_SWORD': '+10'
    - 'GOLD_SWORD': '+10'
    - 'WOOD_AXE': '+2'
    - 'STONE_AXE': '+4'
    - 'IRON_AXE': '+8'
    - 'DIAMOND_AXE': '+11'
    - 'GOLD_AXE': '+7'
    - 'BOW': '+10'                                                     
    - 'AIR': '+1'
    - 'SAND': '+1'
    - 'CACTUS': '+1'
    - 'GRAVEL': '+1'
    - 'WOOD': '+1'
    - 'SANDSTONE': '+1'
    - 'WHEAT': '+1'
    - 'APPLE': '+1'
    - 'RAW_FISH': '+1'
    - 'STRING': '+1'
    - 'COAL': '+1'
    - 'STICK': '+1'
    - 'WOOD_SWORD': '+1'
    - 'STONE_SWORD': '+2'
    - 'IRON_SWORD': '+3'
    - 'DIAMOND_SWORD': '+6'
    - 'GOLD_SWORD': '+15'
    - 'WOOD_AXE': '+3'
    - 'STONE_AXE': '+4'
    - 'IRON_AXE': '+6'
    - 'DIAMOND_AXE': '+11'
    - 'GOLD_AXE': '+28'

This has a whopping 34 different items it checks for. If this were a bunch of if statements, MD would have to go through, one by one and check each one. If you were wielding a wooden sword for instance, it would match the first one, then still have to go through all 33 remaining routines essentially wasting its time. A switch statement, however, stops checking after the first one it found. This isn't a huge improvement, but it might be noticeable and worth it if your config is 1.1 MB large and full of these situations.

Examples

Say you have something like this in your Damage event:

- 'if attacker.wielding.WOOD_SWORD': '+3'
- 'if attacker.wielding.STONE_SWORD': '+5'
- 'if attacker.wielding.IRON_SWORD': '+7'
- 'if attacker.wielding.DIAMOND_SWORD': '+10'
- 'if attacker.wielding.GOLD_SWORD': '+10'
- 'if attacker.wielding.WOOD_AXE': '+2'
- 'if attacker.wielding.STONE_AXE': '+4'
- 'if attacker.wielding.IRON_AXE': '+8'
- 'if attacker.wielding.DIAMOND_AXE': '+11'
- 'if attacker.wielding.GOLD_AXE': '+7'
- 'if attacker.wielding.BOW': '+10'
                                                                    
- 'if attacker.wielding.AIR': '+1'
- 'if attacker.wielding.SAND': '+1'
- 'if attacker.wielding.CACTUS': '+1'
- 'if attacker.wielding.GRAVEL': '+1'
- 'if attacker.wielding.WOOD': '+1'
- 'if attacker.wielding.SANDSTONE': '+1'
- 'if attacker.wielding.WHEAT': '+1'
- 'if attacker.wielding.APPLE': '+1'
- 'if attacker.wielding.RAW_FISH': '+1'
- 'if attacker.wielding.STRING': '+1'
- 'if attacker.wielding.COAL': '+1'
- 'if attacker.wielding.STICK': '+1'
- 'if attacker.wielding.WOOD_SWORD': '+1'
- 'if attacker.wielding.STONE_SWORD': '+2'
- 'if attacker.wielding.IRON_SWORD': '+3'
- 'if attacker.wielding.DIAMOND_SWORD': '+6'
- 'if attacker.wielding.GOLD_SWORD': '+15'
- 'if attacker.wielding.WOOD_AXE': '+3'
- 'if attacker.wielding.STONE_AXE': '+4'
- 'if attacker.wielding.IRON_AXE': '+6'
- 'if attacker.wielding.DIAMOND_AXE': '+11'
- 'if attacker.wielding.GOLD_AXE': '+28'
- 'if attacker.wielding.BOW':
    - 'tag.attacker.bowweakness': '8'
    - 'if attacker_tagvalue_weaknesstimer == 0':
        - '_bowweakness'
- 'if attacker.hasanyitem.EYE_OF_ENDER*1':
    - 'if !target.type.Player':
        - 'set.target_fireticks':
            - 'set.250'
    - '+2'
    - 'if attacker.wielding.BOW': '+2'
- 'if target.type.Zombie':
    - 'if attacker.wielding.AIR': '+1'
    - 'if attacker.wielding.SAND': '+1'
    - 'if attacker.wielding.CACTUS': '+1'
    - 'if attacker.wielding.GRAVEL': '+1'
    - 'if attacker.wielding.WOOD': '+1'
    - 'if attacker.wielding.SANDSTONE': '+1'
    - 'if attacker.wielding.WHEAT': '+1'
    - 'if attacker.wielding.APPLE': '+1'
    - 'if attacker.wielding.RAW_FISH': '+1'
    - 'if attacker.wielding.STRING': '+1'
    - 'if attacker.wielding.COAL': '+1'
    - 'if attacker.wielding.STICK': '+1'
- 'if target.type.Spider':
    - 'if attacker.wielding.AIR': '+1'
    - 'if attacker.wielding.SAND': '+1'
    - 'if attacker.wielding.CACTUS': '+1'
    - 'if attacker.wielding.GRAVEL': '+1'
    - 'if attacker.wielding.WOOD': '+1'
    - 'if attacker.wielding.SANDSTONE': '+1'
    - 'if attacker.wielding.WHEAT': '+1'
    - 'if attacker.wielding.APPLE': '+1'
    - 'if attacker.wielding.RAW_FISH': '+1'
    - 'if attacker.wielding.STRING': '+1'
    - 'if attacker.wielding.COAL': '+1'
    - 'if attacker.wielding.STICK': '+1'
- 'if target.type.Creeper':
    - 'if attacker.wielding.AIR': '+1'
    - 'if attacker.wielding.SAND': '+1'
    - 'if attacker.wielding.CACTUS': '+1'
    - 'if attacker.wielding.GRAVEL': '+1'
    - 'if attacker.wielding.WOOD': '+1'
    - 'if attacker.wielding.SANDSTONE': '+1'
    - 'if attacker.wielding.WHEAT': '+1'
    - 'if attacker.wielding.APPLE': '+1'
    - 'if attacker.wielding.RAW_FISH': '+1'
    - 'if attacker.wielding.STRING': '+1'
    - 'if attacker.wielding.COAL': '+1'
    - 'if attacker.wielding.STICK': '+1'

Since no entity can ever be wielding two things at once, only one of the attacker.wielding groups will be fired at once. This will be much better as a few switch routines:

- 'switch attacker.wielding':
    - 'WOOD_SWORD': '+3'
    - 'STONE_SWORD': '+5'
    - 'IRON_SWORD': '+7'
    - 'DIAMOND_SWORD': '+10'
    - 'GOLD_SWORD': '+10'
    - 'WOOD_AXE': '+2'
    - 'STONE_AXE': '+4'
    - 'IRON_AXE': '+8'
    - 'DIAMOND_AXE': '+11'
    - 'GOLD_AXE': '+7'
    - 'BOW': '+10'
                                                                        
    - 'AIR': '+1'
    - 'SAND': '+1'
    - 'CACTUS': '+1'
    - 'GRAVEL': '+1'
    - 'WOOD': '+1'
    - 'SANDSTONE': '+1'
    - 'WHEAT': '+1'
    - 'APPLE': '+1'
    - 'RAW_FISH': '+1'
    - 'STRING': '+1'
    - 'COAL': '+1'
    - 'STICK': '+1'
    - 'WOOD_SWORD': '+1'
    - 'STONE_SWORD': '+2'
    - 'IRON_SWORD': '+3'
    - 'DIAMOND_SWORD': '+6'
    - 'GOLD_SWORD': '+15'
    - 'WOOD_AXE': '+3'
    - 'STONE_AXE': '+4'
    - 'IRON_AXE': '+6'
    - 'DIAMOND_AXE': '+11'
    - 'GOLD_AXE': '+28'
    - 'BOW':
        - 'tag.attacker.bowweakness': '8'
        - 'if attacker_tagvalue_weaknesstimer == 0':
            - '_bowweakness'
- 'if attacker.hasanyitem.EYE_OF_ENDER*1':
    - 'if !target.type.Player':
        - 'set.target_fireticks':
            - 'set.250'
    - '+2'
    - 'if attacker.wielding.BOW': '+2'
- 'if target.type.Zombie':
    - 'switch attacker.wielding':
        - 'AIR': '+1'
        - 'SAND': '+1'
        - 'CACTUS': '+1'
        - 'GRAVEL': '+1'
        - 'WOOD': '+1'
        - 'SANDSTONE': '+1'
        - 'WHEAT': '+1'
        - 'APPLE': '+1'
        - 'RAW_FISH': '+1'
        - 'STRING': '+1'
        - 'COAL': '+1'
        - 'STICK': '+1'
- 'if target.type.Spider':
    - 'switch attacker.wielding':
        - 'AIR': '+1'
        - 'SAND': '+1'
        - 'CACTUS': '+1'
        - 'GRAVEL': '+1'
        - 'WOOD': '+1'
        - 'SANDSTONE': '+1'
        - 'WHEAT': '+1'
        - 'APPLE': '+1'
        - 'RAW_FISH': '+1'
        - 'STRING': '+1'
        - 'COAL': '+1'
        - 'STICK': '+1'
- 'if target.type.Creeper':
    - 'switch attacker.wielding':
        - 'AIR': '+1'
        - 'SAND': '+1'
        - 'CACTUS': '+1'
        - 'GRAVEL': '+1'
        - 'WOOD': '+1'
        - 'SANDSTONE': '+1'
        - 'WHEAT': '+1'
        - 'APPLE': '+1'
        - 'RAW_FISH': '+1'
        - 'STRING': '+1'
        - 'COAL': '+1'
        - 'STICK': '+1'
Clone this wiki locally