2024-09-19 23:27:00 -04:00
const parsePlain = require ( '../util/chatparse_plain.js' )
const parseMc = require ( '../util/chatparse_mc_withHex.js' )
const settings = require ( '../settings.json' )
2024-08-12 05:13:32 -04:00
class SCTask {
constructor ( failTask , startFailed = false ) {
/ *
* failed : Whether to run this task
* failTask : Command to run when failed is true
* /
this . failed = startFailed
this . failTask = failTask
}
}
module . exports = {
load : ( b ) => {
b . sc _tasks = { }
b . selfcareRun = 0
b . interval . sc = setInterval ( ( ) => {
2024-08-22 07:34:39 -04:00
if ( Date . now ( ) - b . selfcareRun <= 600 ) {
2024-08-12 05:13:32 -04:00
return
}
for ( const i in b . sc _tasks ) {
if ( b . sc _tasks [ i ] . failed ) {
b . sc _tasks [ i ] . failTask ( )
}
}
b . selfcareRun = Date . now ( )
} , 40 )
b . add _sc _task = ( name , failTask , startFailed ) => {
b . sc _tasks [ name ] = new SCTask ( failTask , startFailed )
}
// Self care tasks
// Operator
b . add _sc _task ( 'op' , ( ) => {
b . chat ( '/op @s[type=player]' )
} )
b . _client . on ( 'login' , ( p ) => {
b . entityId = p . entityId
} )
b . _client . on ( 'entity_status' , ( p ) => {
if ( p . entityId === b . entityId && p . entityStatus === 24 ) {
b . sc _tasks . op . failed = 1
} else if ( p . entityId === b . entityId && p . entityStatus === 28 ) {
b . sc _tasks . op . failed = 0
}
} )
// CommandSpy
if ( ! b . host . options . isVanilla ) {
b . add _sc _task ( 'cspy' , ( ) => {
b . chat ( '/cspy on' )
} , true )
b . on ( 'plainchat' , ( msg ) => {
if ( msg === 'Successfully disabled CommandSpy' ) {
b . sc _tasks . cspy . failed = 1
} else if ( msg === 'Successfully enabled CommandSpy' ) {
b . sc _tasks . cspy . failed = 0
}
} )
}
2024-08-25 21:45:47 -04:00
// Gamemode / end portal bug
2024-08-12 05:13:32 -04:00
b . add _sc _task ( 'gamemode' , ( ) => {
b . chat ( '/minecraft:gamemode creative' )
} )
b . _client . on ( 'game_state_change' , ( p ) => {
if ( p . reason === 3 && p . gameMode !== 1 ) {
b . sc _tasks . gamemode . failed = 1
} else if ( p . reason === 3 && p . gameMode === 1 ) {
b . sc _tasks . gamemode . failed = 0
2024-08-25 22:29:39 -04:00
} else if ( p . reason === 4 ) {
2024-08-25 21:45:47 -04:00
b . sc _tasks . respawn . failed = 1
2024-08-12 05:13:32 -04:00
}
} )
// Respawning after dying
b . add _sc _task ( 'respawn' , ( ) => {
b . _client . write ( 'client_command' , { actionId : 0 } ) // Simulates respawning
b . sc _tasks . respawn . failed = 0
} )
2024-09-19 23:27:00 -04:00
2024-09-19 00:31:15 -04:00
b . on ( 'chat_unparsed' , ( data ) => {
2024-08-22 07:34:39 -04:00
if ( data . json . translate === 'chat.disabled.options' || ( data . json . extra && data . json . extra [ 0 ] && data . json . extra [ 0 ] . translate === 'chat.disabled.options' ) ||
data . json . translate === 'Chat disabled in client options' || ( data . json . extra && data . json . extra [ 0 ] && data . json . extra [ 0 ] . translate === 'Chat disabled in client options' ) ) {
2024-08-12 05:13:32 -04:00
b . sc _tasks . respawn . failed = 1
}
} )
2024-09-19 23:27:00 -04:00
// Prefix tablist ads
if ( ! b . host . options . isVanilla ) {
b . adPrefix = {
translate : '[%s]' ,
color : 'white' ,
with : [
{
translate : '%s: %s' ,
color : settings . colors . secondary ,
with : [
{
text : 'Prefix'
} ,
{
text : b . prefix [ 0 ] ,
color : settings . colors . primary
}
]
}
]
}
b . add _sc _task ( 'playerlist_ads' , ( ) => {
b . chat ( ` /prefix ${ parseMc ( b . adPrefix ) . replaceAll ( '§' , '&' ) } ` )
b . sc _tasks . playerlist _ads . failed = 0
} )
b . on ( 'playerdata' , ( uuid , displayName ) => {
if ( uuid === b . _client . uuid && ! displayName . startsWith ( parsePlain ( b . adPrefix ) ) ) {
b . sc _tasks . playerlist _ads . failed = 1
}
} )
}
2024-08-12 05:13:32 -04:00
}
}