Files
WorldHandler/doc/Usercontent.md
2019-11-02 19:20:00 +01:00

12 KiB

Usercontent Reference

The World Handler provides the ability to be extended with custom tabs configured with json files.

Setup

The World Handler only loads usercontent files from ../.minecraft/config/worldhandler/usercontent/.
To add a custom GUI a new folder is required with a json file inside it named exactly the same as the folder.
That name indicates the id of the usercontent and may only consist of the characters 0-9 a-z -_:.
Additionally a javascript file can be created inside the folder with exactly the same name as the folder.

Example setup for a custom GUI with id example:

../.minecraft/config/worldhandler/usercontent/example/example.json
../.minecraft/config/worldhandler/usercontent/example/example.js

An example GUI can be found here

Index

Content: A single GUI of the World Handler i.e. the main page
Category: A collection of contents that are grouped together and are displayed in tabs next to each other
Elements: A structure of buttons simplifying the creation of larger menus

General Structure

{
	"model": {
		"commands": [
			#See commands
		]
	},
	"gui": {
		"title": "", #The title of the gui
		"tab": {
			"title": "", #The title of the tab
			"category": "", #The category where the tab should be clickable in (See reference/category-ids)
			"category_index": 0, #The index of the tab (left: 0, right: last tab index)
			"active_content": "" #The id of the active content (See reference/content-ids)
		},
		"buttons": [
			#See buttons
		],
		"elements": [
			#See elements
		],
		"texts": [
			#See texts
		]
	}
}

Commands

All commands that should be modifiable, executable or visible by the command syntax need to be modeled

{
	"name": "", #The root of the command
	"syntax": [
		{
			"name": "", #Placeholder text for the argument
			"type": "", #Type of the argument (See table below for available types)
			"required": true #Whethter or not this argument is required in order to complete the command
		}
	],
	"visible": {
		#See widget-states
	}
}
Argument types Comment
byte Default java byte
short Default java short
int Default java integer
float Default java float
double Default java double
long Default java long
boolean Default java boolean
string Default java string
greedy_string String that can be read across whitespaces. (usually in quotes)
resource_location Minecraft resource location. Example: namespace:resource
item_resource_location Resource location with attached nbt. Example: namespace:resource{"nbt":"example"}
block_resource_location Item resource location with attached block tag. Example: namespace:resource[state=example]
nbt Minecraft data structure. Example: {"nbt":"example"}
coordinate_int An integer that can either be absolute or relative in a global (prefix: ~) or local (prefix: ^) context
coordinate_double A double that can either be absolute or relative in a global (prefix: ~) or local (prefix: ^) context
target_selector Filter for entities. This implementation only supports @e with arguments. Example: @e[type=player]
player Username of the player that will be automatically set by the system

Buttons

{
	"text": "", #Optional
	"type": "", #See table below for available types
	"dimensions": {
		"x": 0,
		"y": 0,
		"width": 114,
		"height": 20
	},
	"action": {
		#See action
	},
	"attributes": {
		"id": "",
		"item": "", #Resource location
		"icon": "", #See reference/icon-ids for available ids
		"visible": {
			#See widget-states
		},
		"enabled": {
			#See widget-states
		}
	}
}
Button type Description Actions Required attributes Optional Attributes
button Simple button open, set, run, back, back_to_game, js - tooltip
textfield Simple textfield set, js id -
item_button Button with an item instead of text open, set, run, back, back_to_game, js item -
icon_button Button with an icon instead of text open, set, run, back, back_to_game, js icon tooltip
list_button Button with the option to cycle through items set, js items -
slider Simple slider set, js id, min, max start

Elements

"type": "", #See table below for available types
"dimensions": {
	"x": 0,
	"y": 0,
	"width": 114,
	"height": 20
},
"attributes": {
	"id": "",
	"length": 1,
	"items": [
		{
			"id": "",
			"translation": "" #Translation key or string value
		}
	]
}
Element type Description Required attributes Optional Attributes
page_list Creates column of buttons with length options to choose from and two buttons for navigating left and right id, length, items -

Text

{
	"text": "",
	"x": 0,
	"y": 0,
	"color": 2039583 #Color of the text (red << 16 + green << 8 + blue)
}

Action

"action": {
	"type": "", #See table below for available types
	"attributes": {
		"function": "", #Name of the js function
		"command": 0, #Index of the command inside the json file
		"index": 0, #Argument index
		"value": ""
	}
}
Action type Description Required attributes Optional Attributes
open Opens the content associated with value value -
set Sets the argument index of command command to value or the value provided by the system index, command value
run Runs the command from value value -
back Goes back to the previous content - -
back_to_game Closes the GUI - -
js Invokes the javascript function function (with argument value) function value

Widget states

There are two widget states: visible and enabled
This structure is optional.

"visible": {
	"type": "",
	"bool": true
	"function": "" #Name of the js function
}
State type Description Required attributes Optional Attributes
bool The state will be determined by the value of the bool attribute bool -
js Invokes the javascript function function and uses the result function -

JavaScript API

The JavaScript interpreter comes with an instance of UsercontentAPI available for reference with api

Example: api.addChatMessage("Hello World")

Function Description
String getValue(String id) returns the value stored by a button or element with id id
String getCommandArgument(int command, int index) returns the argument at index index of command command
void setCommandArgument(int command, int index, String object) sets the argument at index index of command command to object
void addChatMessage(Object object) prints the object to the ingame chat

ActionHelper

Example:

var ActionHelper = Java.type('exopandora.worldhandler.helper.ActionHelper');
ActionHelper.displayGui();
Function Description
void backToGame() Closes the GUI
void back(String id) Tries to open the back content of content with id id
void open(String id) Tries to open the content with id id
void timeDawn() Sets the time to dawn
void timeNoon() Sets the time to noon
void timeSunset() Sets the time to sunset
void timeMidnight() Sets the time to midnight
void weatherClear() Sets the weather to clear
void weatherRain() Sets the weather to rain
void weatherThunder() Sets the weather to thunder
void difficultyPeaceful() Sets the difficulty to peaceful
void difficultyEasy() Sets the difficulty to easy
void difficultyNormal() Sets the difficulty to normal
void difficultyHard() Sets the difficulty to hard
void gamemodeSurvival() Sets the gamemode to survival
void gamemodeCreative() Sets the gamemode to creative
void gamemodeAdventure() Sets the gamemode to adventure
void gamemodeSpectator() Sets the gamemode to spectator
void displayGui() Tries to open the World Handler GUI (same as pressing the activation button)

Reference

Content ids Category ids Icon ids
main main weather_sun
containers entities weather_rain
multiplayer items weather_storm
summon blocks difficulty_peaceful
custom_item world difficulty_easy
enchantment player difficulty_normal
edit_blocks scoreboard difficulty_hard
sign_editor time_dawn
note_editor time_noon
world time_sunset
gamerules time_midnight
recipes gamemode_survival
player gamemode_creative
experience gamemode_adventure
advancements gamemode_spectator
scoreboard_objectives butcher
scoreboard_teams potion
scoreboard_players achievements
change_world home
continue settings
potions reload
butcher
butcher_settings
settings