# 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