Release Batches
MassiveCore and the plugins built using it are released in batches. All plugins in a release batch have the same version number.
Make sure to update all the plugins at the same time. You may only have one version of MassiveCore installed on your server at the same time.
The Configuration Files
The first config is the file /plugins/MassiveCore/conf.json:
1 2 3 4 5 6 7 8 9 |
{ "serverid": "550e8400-e29b-41d4-a716-446655440000", "dburi": "default", "alias2uri": { "default": "flatfile", "flatfile": "flatfile://mstore", "mongodb": "mongodb://localhost:27017/mstore" } } |
For a normal setup (99% of the cases) you can just leave the config file as is. You can edit this config file while the server is running but in order for the changes to take effect you must restart your server.
- serverid: is an ID for the server. This is currently not used for anything and can be ignored.
- dburi: is the database URI or alias for the default mstore database.
- alias2uri: is a “recursive lookup map” for database URI aliases. For example “default” resolves like “default” → “flatfile” → “flatfile://mstore”. The value “flatfile://mstore” means use flatfile storage placing the data flatfiles in the folder “/mstore” (a sibling folder to the “/plugins” folder).
The second config is the database object massivecore_conf/instance:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
{ "aliasesOuterMassiveCore": [fusion_builder_column type="1_1" background_position="left top" background_color="" border_size="" border_color="" border_style="solid" spacing="yes" background_image="" background_repeat="no-repeat" padding="" margin_top="0px" margin_bottom="0px" class="" id="" animation_type="" animation_speed="0.3" animation_direction="left" hide_on_mobile="no" center_content="no" min_height="none"][ "massivecore", "mcore", "massivec", "mc" ], "aliasesOuterMassiveCoreUsys": [ "usys" ], "aliasesOuterMassiveCoreStore": [ "massivestore", "mstore" ], "aliasesOuterMassiveCoreBuffer": [ "buffer" ], "usingRecipientChatEvent": true, "permissionDeniedFormats": { "some.awesome.permission.node": "<b>You must be awesome to %s<b>.", "some.derp.permission.node.1": "derp", "some.derp.permission.node.2": "derp", "some.derp.permission.node.3": "derp", "derp": "<b>Only derp people can %s<b>.\n<i>Ask a moderator to become derp." }, "permissionToTpdelay": { "massivecore.notpdelay": 0, "default": 10 }, "deleteFiles": [], "catchingMongoDbErrorsOnSave": true, "catchingMongoDbErrorsOnDelete": true, "variableBook": "***book***", "usingVariableBook": true, "variableBuffer": "***buffer***", "usingVariableBuffer": true } |
For a normal setup (99% of the cases) you can just leave the config file as is. You can edit this file when the server is running. The changes will automatically be loaded into the server after a few seconds.
- aliasesOuterMassiveCore: are the aliases for the outer /massivecore command.
- aliasesOuterMassiveCoreUsys: are the aliases for the outer /usys command.
- aliasesOuterMassiveCoreStore: are the aliases for the outer /mstore command.
- aliasesOuterMassiveCoreBuffer: are the aliases for the outer /buffer command.
- usingRecipientChatEvent: Required for {factions_relcolor} to work but can be disabled here.
- permissionDeniedFormats: allows you to set custom denied messages for a permission node. The lookups in this map is “recursive”. For example “some.derp.permission.node.1” would resolve → “derp” → “Only derp people can %s.\nAsk a moderator to become derp.”.
- permissionToTpdelay: is the normal delay in seconds before teleportation when a plugin makes use of MassiveCore’s delayed teleportation system.
- deleteFiles: is a list of files which will be kept deleted.
- catchingMongoDbErrorsOnSave: Wite concern will be ACKNOWLEDGED for true and ERRORS_IGNORED for false. Setting to false may result in performance gain.
- catchingMongoDbErrorsOnDelete: Wite concern will be ACKNOWLEDGED for true and ERRORS_IGNORED for false. Setting to false may result in performance gain.
- variableBook: The variable to replace with book in hand content.
- usingVariableBook: Set to false to disable this feature.
- variableBuffer: The variable to replace with buffer content.
- usingVariableBuffer: Set to false to disable this feature.
Commands
- /mcore use the mcore command
- /mcore usys use the usys command
- /mcore mstore use the mstore command
- /mcore id see the server id
- /mcore hearsound,hearsounds <sound(s)> hear a sound
Example: /mcore hearsound WITHER_SPAWN,0.5,1.4 LEVEL_UP,1.0,1.0 - /mcore buffer use the buffer command
- /mcore v,version display plugin version and information
Note that /mcore usys and /mcore mstore and /mcore buffer also are available as top-level-commands /usys and /mstore and /buffer.
- /mstore stats show mstore statistics
- /mstore listcolls [db=default] list collections in a database
- /mstore copydb <from> <to> copy database content
- /usys m,multiverse manage multiverses
- /usys m,multiverse l,list [page=1] list multiverses
- /usys m,multiverse s,show <multiverse> show multiverse
- /usys m,multiverse n,new <multiverse> create new multiverse
- /usys m,multiverse d,del <multiverse> delete multiverse
- /usys u,universe manage universes
- /usys u,universe n,new <universe> <multiverse> create new universe in multiverse
- /usys u,universe d,del <universe> <multiverse> delete multiverse
- /usys u,universe c,clear <universe> <multiverse> clear universe in multiverse
- /usys w,world <world> <universe> <multiverse> set a worlds universe in a multiverse
- /usys a,aspect manage aspects
- /usys a,aspect l,list [page=1] list aspects
- /usys a,aspect s,show <aspect> show aspect
- /usys a,aspect u,use <aspect> <multiverse> set multiverse for aspect
- /buffer p,print print buffer
- /buffer c,clear clear buffer
- /buffer s,set <string> set buffer
- /buffer a,add <string> add to buffer
- /buffer w,whitespace [time=1] add whitespace to buffer
The universe system (usys)
The purpose of usys is to offer awesome “multiworld support“. This is best described by example.
An example
Say you are using the vampire plugin and have 5 worlds on your server. The 2 worlds creativeherp and creativederp are creativemode worlds. The 3 worlds survivalfoo, survivalbar and survivalzoot are survivalmode worlds.
Wouldn’t it be great if players could be vampires in the survival-mode worlds but not in the creative-mode worlds? Players are supposed to roleplay in the survival-mode worlds and vampirism is great fun when roleplaying. However in the creative-mode worlds there’s no roleplaying going on and vampirism is irritating and unwanted.
With usys you could then create two universes in your default multiverse:
- Universe “survival” contains worlds “survivalfoo”, “survivalbar” and “survivalzoot”.
- Universe “creative” contains worlds “creativederp” and “creativederp”.
Then you point the aspect “vampire_player” to use the default multiverse (this is acctually the case by default)
The Details
- Each multiverse contains many universes.
- Each universe contains many worlds.
- Each world belongs to exactly one universe. (in each multiverse)
- Each aspect use a certain multiverse.
There’s an undeletable multiverse called “default”.
There’s an undeletable universe called “default” in each multiverse.
An aspect will use the “default” multiverse if nothing else is specified.
A world will use the “default” universe if nothing else is specified.
Aspects are supplied by plugins. The plugin Vampire does for example have two aspects called “vampire_player” and “vampire_config”:
- vampire_player: Everything related to player state
- Is the player a vampire or not?
- What was the infection reason?
- vampire_config: Config options for balancing
- What is the splash potion radius for holy water?
- What items are considered wooden stakes?
Multiverses are templates saying what universes exist and what worlds are in them. You will find yourself reusing multiverses, that is pointing many aspects to use the same multiverse.
Tips and Trix
Do you want to remove a world from a universe?
Just assign it to the default universe.
Chat and Command Variables
MassiveCore ships with a small substitution utility. There are special variables you can use in chat or commands.
- ***book***: Will be replaced with the content of the book you are holding in your hand.
- ***buffer***: Will be replaced with the content of your buffer. You can manage your buffer using the /buffer command.
These variables are replaced as early as possible, just when the data reaches the server. They can thus be used as a workaround for the limited length of the MineCraft client chat window.
The data store system (mstore)
MassiveCore contains a data storage/persistence system. With a default config you find all this “data” as flat-files in the folder “mstore” in you server folder.
An especially nice feature is that the storage system polls for changes in the backend. You can change the “.json”-flatfiles during runtime and the changes will be loaded into the server. It is thus possible to point two servers to the same database although data may get lost every once in a while due to write conflicts.
The store system uses GSON for serialization and can use either flatfile or mongodb backend. You specify what database you want to use in the configuration.
Permissions and plugin.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
main: com.massivecraft.massivecore.MassiveCore name: MassiveCore version: 2.7.0 website: https://www.massivecraft.com/massivecore authors: [Cayorion] description: §eMassiveCore is a plugin that contains libraries and features that other plugins make use of. §aCayorion §efrom the minecraft server §aMassiveCraft §eis the lead programmer. Feel free to visit us at §bhttps://www.massivecraft.com load: startup permissions: # -------------------------------------------- # # THE REAL NODES # -------------------------------------------- # # cmd massivecore.basecommand: {description: use the MassiveCore base command, default: false} massivecore.test: {description: run developer test, default: false} massivecore.id: {description: see the server id, default: false} massivecore.version: {description: diplay plugin version, default: false} massivecore.hearsound: {description: hear a sound, default: false} massivecore.store: {description: use the mstore command, default: false} massivecore.store.stats: {description: show mstore statistics, default: false} massivecore.store.listcolls: {description: list collections in a database, default: false} massivecore.store.copydb: {description: copy database content, default: false} massivecore.usys: {description: use the usys command, default: false} massivecore.usys.multiverse: {description: manage multiverses, default: false} massivecore.usys.multiverse.list: {description: list multiverses, default: false} massivecore.usys.multiverse.show: {description: show multiverse, default: false} massivecore.usys.multiverse.new: {description: create new multiverse, default: false} massivecore.usys.multiverse.del: {description: delete multiverse, default: false} massivecore.usys.universe: {description: manage universes, default: false} massivecore.usys.universe.new: {description: create new universe in multiverse, default: false} massivecore.usys.universe.del: {description: delete universe in multiverse, default: false} massivecore.usys.universe.clear: {description: clear universe in multiverse, default: false} massivecore.usys.world: {description: set a worlds universe in a multiverse, default: false} massivecore.usys.aspect: {description: manage aspects, default: false} massivecore.usys.aspect.list: {description: list aspects, default: false} massivecore.usys.aspect.show: {description: show aspect, default: false} massivecore.usys.aspect.use: {description: set multiverse for aspect, default: false} massivecore.buffer: {description: use the buffer command, default: false} massivecore.buffer.print: {description: print buffer, default: false} massivecore.buffer.clear: {description: clear buffer, default: false} massivecore.buffer.set: {description: set buffer, default: false} massivecore.buffer.add: {description: add to buffer, default: false} massivecore.buffer.whitespace: {description: add whitespace to buffer, default: false} massivecore.cmdurl: {description: run all lines of url content, default: false} # misc massivecore.notpdelay: {description: teleport without delay, default: false} massivecore.variable.book: {description: replace ***book*** with content of book in your hand, default: false} massivecore.variable.buffer: {description: replace ***buffer*** with content of your buffer, default: false} # -------------------------------------------- # # STAR NOTATION # -------------------------------------------- # massivecore.*: default: false children: massivecore.basecommand: true massivecore.test: true massivecore.id: true massivecore.version: true massivecore.hearsound: true massivecore.store: true massivecore.store.stats: true massivecore.store.listcolls: true massivecore.store.copydb: true massivecore.usys: true massivecore.usys.multiverse: true massivecore.usys.multiverse.list: true massivecore.usys.multiverse.show: true massivecore.usys.multiverse.new: true massivecore.usys.multiverse.del: true massivecore.usys.universe: true massivecore.usys.universe.new: true massivecore.usys.universe.del: true massivecore.usys.universe.clear: true massivecore.usys.world: true massivecore.usys.aspect: true massivecore.usys.aspect.list: true massivecore.usys.aspect.show: true massivecore.usys.aspect.use: true massivecore.buffer: true massivecore.buffer.print: true massivecore.buffer.clear: true massivecore.buffer.set: true massivecore.buffer.add: true massivecore.buffer.whitespace: true massivecore.cmdurl: true massivecore.notpdelay: true massivecore.variable.book: true massivecore.variable.buffer: true # -------------------------------------------- # # KITS # -------------------------------------------- # massivecore.kit.operator: default: op children: massivecore.*: true massivecore.kit.rank3: default: false children: massivecore.kit.rank2: true massivecore.kit.rank2: default: false children: massivecore.kit.rank1: true massivecore.kit.rank1: default: false children: massivecore.kit.rank0: true massivecore.id: true massivecore.store: true massivecore.store.stats: true massivecore.store.listcolls: true massivecore.usys: true massivecore.usys.multiverse: true massivecore.usys.multiverse.list: true massivecore.usys.multiverse.show: true massivecore.usys.aspect: true massivecore.usys.aspect.list: true massivecore.usys.aspect.show: true massivecore.buffer: true massivecore.buffer.print: true massivecore.buffer.clear: true massivecore.buffer.set: true massivecore.buffer.add: true massivecore.buffer.whitespace: true massivecore.notpdelay: true massivecore.variable.book: true massivecore.variable.buffer: true massivecore.kit.rank0: default: false children: massivecore.basecommand: true massivecore.hearsound: true massivecore.version: true massivecore.kit.default: default: true children: massivecore.kit.rank0: true |