# Texts and Strings
In Minecraft text in the chat or as title is defined with JSON-data. objD makes the JSON part of it easier by utilizing a few classes:
# TextComponent
| TextComponent | |
|---|---|
| String | the text displayed (required) | 
| color | a the color of the type Color | 
| bold | bool whether it is bold | 
| italic | bool whether it is italic | 
| underlined | bool whether it is underlined | 
| strikethrough | bool whether it is strikethrough | 
| obfuscated | bool whether it is obfuscated | 
| clickEvent | A TextClickEvent to handle left clicks | 
| hoverEvent | A TextHoverEvent to handle mouse overs | 
| insertion | a String witch is inserted into the input if shift left clicked | 
Puuh, that are a lot of properties, we'll come to Color, TextClickEvent and TextHoverEvent in a bit.
Example
Title(
	Entity.Player(),
	show: [
		TextComponent("Hello",
			color: Color.White,
			bold: true,
			italic:true,
			underlined: true,
			strikethrough: false,
			obfuscated: false,
			clickEvent: TextClickEvent.open_url("https://stevertus.com"),
			hoverEvent: TextHoverEvent.text([TextComponent("hover me")]),
			insertion: "panic"
		)
	]
)
⇒ title  title [{"text":"Hello","color":"white","bold":true,"italic":true,"underlined":true,"clickEvent":{"action":"open_url","value":"https://stevertus.com"},"hoverEvent":{"action":"text","value":[{text:"hover me"}]}}]
Now, its up to you to decide which is easier to read. There are also some other data sources:
| TextComponent.translate | |
|---|---|
| String | the translate key (required) | 
| conversionFlags | a List containing a String, TextComponent or another List of TextComponents that replace placeholder values(e.g $s) | 
| fallback | fallback String when translation is not available | 
| ...same properties... | from TextComponent | 
| TextComponent.score | |
|---|---|
| Entity | the entity with the score(required) | 
| objective | Name of the Scoreboard Objective(required) | 
| ...same properties... | from TextComponent | 
TextComponent.score(
	Entity.Selected(),
	objective: "myscores",
	color:Color.Black
)
⇒ {"score":{"name": "@s","objective":"myscores"},"color":"black"}
| TextComponent.selector | |
|---|---|
| Entity | the entity whose name you want to display(required) | 
| ...same properties... | from TextComponent | 
TextComponent.selector(
	Entity(name:"hello"),
	color:Color.Black
)
⇒ {"selector":"@e[name=hello]","color":"black"}
| TextComponent.entityNbt | |
|---|---|
| Entity | the entity which has nbt to display | 
| path | the path as a String | 
| interpret | bool if nbt should be interpreted as TextComponent(optional) | 
| ...same properties... | from TextComponent | 
TextComponent.entityNbt(
	Entity.Selected(),
	path: "CustomName"
	underlined: true
)
⇒ {"entity":"@s","nbt":"CustomName","underlined":true}
| TextComponent.blockNbt | |
|---|---|
| Location | a location of a block | 
| path | the path as a String | 
| interpret | bool if nbt should be interpreted as TextComponent(optional) | 
| ...same properties... | from TextComponent | 
TextComponent.blockNbt(
	Location.glob(x:5,y:10,z:100),
	path: "Items[0].tag.display.Name"
	interpret: true
)
⇒ {"block":"5 10 100","nbt":"Items[0].tag.display.Name","interpret":true}
| TextComponent.storageNbt | |
|---|---|
| String | The name of your Storage(including namespace) | 
| path | the path as a String | 
| interpret | bool if nbt should be interpreted as TextComponent(optional) | 
| ...same properties... | from TextComponent | 
TextComponent.storageNbt(
	'mypack:storage1',
	path: 'Custom.Stored.Text'
	interpret: true
)
| TextComponent.lineBreak | 
|---|
| This inserts a simple line break | 
| TextComponent.none | 
|---|
| Just an empty TextComponent, might be used to clear a previous textcomponent | 
| TextComponent.customFont | |
|---|---|
| String | a Custom Font Character(\u[HEX]) to insert in your text | 
| ...same properties... | from TextComponent | 
TextComponent.customFont("\uFaa4")
⇒ {"text":"\uFaa4","color":"white"}
WARNING
Attention: This requires a custom negative spaces font by AmberW installed(get it here (opens new window))
| TextComponent.space | |
|---|---|
| int | the pixel amount you want to move the next TextComponent (positive or negative) | 
| ...same properties... | from TextComponent | 
This automatically calculates the custom characters for moving your text horizontally.
Tellraw(
	Entity.All(),
	show:[
		TextComponent.space(478),
		TextComponent("This is moved")
	]
)
⇒ tellraw    [{"text":"\uF82D\uF82C\uF82B\uF829\uF828\uF826"},{"text":"This is moved"}]
# Colors
| Color([color_name]) | or | 
|---|---|
| Color.[color_name] | Uppercase! | 
See all available colors: https://minecraft.gamepedia.com/Formatting_codes#Color_codes
Examples:
Color.Black,
Color.DarkPurple
Color("gold")
Color('dark_green')
With 1.16 you can also use any rgb color now:
Color("#ff6a00")
Color.fromInt(16738816)
Color.fromRGB(255,106,0)
# TextClickEvent
Fires on left click, Part of TextComponent.
| constructors | |
|---|---|
| TextClickEvent.open_url(String) | Opens the specified web url | 
| TextClickEvent.run_command(Command) | runs the command | 
| TextClickEvent.suggest(Command) | puts the command in the chat input | 
| TextClickEvent.change_page(int) | turns a books page to the value(just Books!) | 
# TextHoverEvent
Fires on mouse over, Part of TextComponent.
| constructors | |
|---|---|
| TextClickEvent.text(List<TextComponent>) | Accepts a new List of TextComponents to display | 
| TextClickEvent.achievement(String) | shows achievement | 
| TextClickEvent.item(Item) | shows item | 
| TextClickEvent.entity(String,String,String) | displays a dummy entity with name, type and UUID(in this order)) | 
# Log
The log widgets displays a console logging in the players chat. That way you can quickly check execution times, score values, numbers, booleans and entities.
| constructor | |
|---|---|
| String, Number, Boolean, Score or Entity | message to display | 
| to | which player you want to send the log(default = Entity.All()) | 
| desc | a message that is inserted before the value | 
| color | the color of the console indicator(default = Color.DarkAqua) | 
Example:
Log("Hello there!",color:Color.White),
⇒ tellraw  [{"text":"Console > ","color":"white"},{"text":"Hello there!"}]
Log(Score(Entity.Selected(),"objective"),to: Entity.Selected())
⇒ tellraw  [{"text":"Console > ","color":"dark_aqua"},{"score":{"name":"@s","objective":"objective"}}]
You can also use Log.debug and Log.info with the same syntax to get a more prominent and less prominent version.
# Title
To display our TextComponent, we need the /title command and the Title class wrapper.
| constructor | |
|---|---|
| selector | the Entity for the title to show | 
| show | A List of TextComponents to show | 
Example
Title(
	Entity.Player(),
	show: List<TextComponent>[
		TextComponent(
			"hey",
			color: Color.Black
		)
	]
)
⇒ title  title [{"text":"hey","color":"black"}]
The same goes also for subtitle and actionbar:
| Title.subtitle or Title.actionbar | |
|---|---|
| selector | the Entity for the title to show | 
| show | A List of TextComponents to show | 
Title.clear clears all titles again:
| Title.clear | |
|---|---|
| selector | clears title for the selector | 
Title.times sets the timings
| Title.times | |
|---|---|
| selector | edit the durations for this selector | 
| fadein | the fadein Time (default 1 second) | 
| display | the Time the title stays (default 3 seconds) | 
| fadeout | the fadeout Time in ticks(default 1 second) | 
And also a resetter for that:
| Title.resetTimes | |
|---|---|
| selector | resets times for this selector | 
Examples:
Title.actionbar(
	Entity.All(),
	show: [
		TextComponent("hey")
	]
)
⇒ title  actionbar [{"text":"hey"}]
Title.clear(Entity())
⇒ title  clear
Title.times(Entity.All(),fadein:30.ticks,display:2.seconds,fadeout:1.seconds)
⇒ title  times 30 2s 1s
Title.resetTimes(Entity.All())
⇒ title  reset
# Tellraw
The Tellraw class is very similar to the Title class, but shows its texts in the chat:
| constructor | |
|---|---|
| selector | the Entity for the text to show | 
| show | A List of TextComponents to show | 
Example
Tellraw(
	Entity.Player(),
	show: List<TextComponent>[
		TextComponent(
			"hey",
			color: Color.Black
		)
	]
)
⇒ tellraw  [{"text":"hey","color":"black"}]
# Item.Book
This provides a book generator to use TextComponents with Books.
| Item.Book | |
|---|---|
| List of BookPage | content of the pages | 
| title | a String to give the book a title(optional) | 
| author | displays an author message (optional) | 
| ... | same as Item | 
The page itself is another class:
| BookPage | |
|---|---|
| content | either a String, TextComponent or List of TextComponents | 
Or with a custom font character:
| BookPage.customFont | |
|---|---|
| String | your custom character(\u[HEX]) | 
A possible book could look like this:
Item.Book(
 [
   BookPage("This is the title page"),
   BookPage(
     TextComponent("Colored text",color:Color.Blue),
   ),
   BookPage.customFont("\uEaa2"),
   BookPage([
     TextComponent("one text"),
     TextComponent(
	     "another clickable text",
	     clickEvent:TextClickEvent.change_page(0)
     )
   ])
 ],
 title: "my book",
 lore: [TextComponent("This is my description")]
)
⇒ minecraft:written_book{"title":"my book","author":"","pages":["[{\"text\":\"This is the title page\"}]","[{\"text\":\"Colored text\",\"color\":\"blue\"}]","[{\"text\":\"\uEaa2\",\"color\":\"white\"}]","[{\"text\":\"one text\"},{\"text\":\"another clickable text\",\"clickEvent\":{\"action\":\"change_page\",\"value\":\"0\"}}]"],"display":{"Lore":["{\"text\":\"This is my description\"}"]}}
# Bossbar
The Bossbar shows up on the top of a specific player screen and displays a text with a value bar.
| constructor | |
|---|---|
| String | id of the bossbar(tip: use [namespace]:id to avoid interference) | 
| name | a String for the displayed text(optional) | 
This alone would add a new bossbar to the game:
Bossbar("test:mybar","This is my bar")
⇒ bossbar add test:mybar {"text":"This is my bar"}
To modifiy some properties, there are some methods on the Bossbar to change the output:
# Methods
These methods give a new Widget that performs the action, the original widget does not change
remove - removes the selected bossbar in the game show - takes in an entity and shows the bossbar for the selected players get - gets an BossbarOption of the specified Bossbar
BossbarOption.max, BossbarOption.value, BossbarOption.visible or BossbarOption.players
| set | sets an option of the bossbar | 
|---|---|
| name | displayed String | 
| nameTexts | a List of TextComponents that override the name with more control | 
| color | the Color of the Bossbar | 
| style | a Style Mode | 
| value | the displayed value | 
| max | the maximum amount of the displayed value | 
| visible | bool if the bossbar is visible | 
| players | the Entityselector to which the bossbar is displayed | 
The set method generates multiple commands:
Bossbar("test:mybar").set(
	name:"My name",
	value: 5,
	max: 10,
	color: Color.Red,
	players: Entity.All()
)
⇒ bossbar set test:mybar name {"text":"My name"}
⇒ bossbar set test:mybar color red
⇒ bossbar set test:mybar value 5
⇒ bossbar set test:mybar max 10
⇒ bossbar set test:mybar players 
