Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 0 additions & 35 deletions src/lib/modules/commands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,41 +35,6 @@ export const server = function (serv: Server, { version }: Options) {
}
}

serv.commands.add({
base: 'title',
info: 'show title',
op: true,
usage: '/title <targets> (title|subtitle|actionBar) <title>',
parse (str) {
const match = str.match(/([A-Za-z0-9]+( [A-Za-z0-9]+)+) ^(title|subtitle|actionBar)$ \{[^}]*\}/i)
if (!match) return false
const players = str.split(/^(title|subtitle|actionBar)$/)[0]
const level = str.match(/^(title|subtitle|actionBar)$/)
const text = str.split(/^(title|subtitle|actionBar)$/)[-1]
if (!players || !level || !text) return false
return { playersNamesAndTargetValues: players, level: level[0], text: text }
},
action (data, ctx) {
const selectorString = ctx.player ? ctx.player.selectorString : serv.selectorString
const isPlayer = (entity: Entity): entity is Player => entity.type === 'player'
const players = selectorString(data.playersNamesAndTargetValues).filter(isPlayer)
switch (data.level) {
case 'title':
serv._writeArray("Title", { "set_title_text": data.text }, players)
break
case 'subtitle':
serv._writeArray("Title", { "set_title_subtitle": data.text }, players)
break
case 'actionBar':
serv._writeArray("Title", { "action_bar": data.text }, players)
break
default:
return "Something went wrong. Try again."
}
return "Title or action bar should appear"
}
})

serv.commands.add({
base: 'ping',
info: 'to pong!',
Expand Down
9 changes: 7 additions & 2 deletions src/lib/modules/players.ts
Original file line number Diff line number Diff line change
Expand Up @@ -242,11 +242,16 @@ export const server = function (serv: Server, { version }: Options) {
if (players.length < 1) throw new UserError('Player not found')

const action = mode.toLowerCase()
if (action === 'clear' || action === 'reset') {
if (action === 'clear') {
players.forEach(player => serv.clearTitle(player))
return 'Title cleared'
}

if (action === 'reset') {
players.forEach(player => serv.resetTitle(player))
return 'Title reset'
}

if (action === 'times') {
const [fadeInRaw, stayRaw, fadeOutRaw] = rest.split(/\s+/)
const fadeIn = parseInt(fadeInRaw, 10)
Expand All @@ -266,7 +271,7 @@ export const server = function (serv: Server, { version }: Options) {
players.forEach(player => serv.sendTitle(player, '', rest))
return 'Subtitle sent'
}
if (action === 'actionbar' || action === 'actionBar') {
if (action === 'actionbar') {
players.forEach(player => serv.sendActionBar(player, rest))
return 'Action bar sent'
}
Expand Down
33 changes: 24 additions & 9 deletions src/lib/modules/title.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,21 @@ export const server = function (serv: Server, options: Options) {
fadeOut
})
} else {
// Pre-1.17 uses single title packet
player._client.write('title', {
action: 3,
fadeIn,
stay,
fadeOut
})
if (title) {
player._client.write('title', {
action: 0, // Set title
text: JSON.stringify({ text: title }),
fadeIn,
stay,
fadeOut
action: 0,
text: JSON.stringify({ text: title })
})
}
if (subtitle) {
player._client.write('title', {
action: 1, // Set subtitle
action: 1,
text: JSON.stringify({ text: subtitle })
})
}
Expand All @@ -50,7 +52,7 @@ export const server = function (serv: Server, options: Options) {
})
} else {
player._client.write('title', {
action: 2, // Set times
action: 3,
fadeIn,
stay,
fadeOut
Expand All @@ -74,13 +76,25 @@ export const server = function (serv: Server, options: Options) {
}

serv.clearTitle = (player: Player) => {
if (supportsNewTitle) {
player._client.write('clear_titles', {
reset: false
})
} else {
player._client.write('title', {
action: 4
})
}
}

serv.resetTitle = (player: Player) => {
if (supportsNewTitle) {
player._client.write('clear_titles', {
reset: true
})
} else {
player._client.write('title', {
action: 4 // Clear
action: 5
})
}
}
Expand All @@ -92,5 +106,6 @@ declare global {
setTitleTimes: (player: Player, fadeIn?: number, stay?: number, fadeOut?: number) => void
sendActionBar: (player: Player, message: string) => void
clearTitle: (player: Player) => void
resetTitle: (player: Player) => void
}
}