2023-06-05 21:31:26 -04:00
package kamkeel.command ;
import net.minecraft.command.CommandException ;
import net.minecraft.command.ICommandSender ;
import net.minecraft.entity.player.EntityPlayerMP ;
import noppes.npcs.Server ;
import noppes.npcs.constants.EnumPacketClient ;
import noppes.npcs.constants.EnumQuestRepeat ;
import noppes.npcs.controllers.PlayerDataController ;
import noppes.npcs.controllers.QuestController ;
import noppes.npcs.controllers.data.PlayerData ;
import noppes.npcs.controllers.data.Quest ;
import noppes.npcs.controllers.data.QuestCategory ;
2023-06-23 14:35:54 -04:00
import noppes.npcs.controllers.data.QuestData ;
2024-02-15 17:54:28 -05:00
import java.util.Collection ;
2023-06-05 21:31:26 -04:00
import java.util.List ;
public class QuestCategoryCommand extends CommandKamkeelBase {
@Override
public String getCommandName () {
return "questcat" ;
}
@Override
public String getDescription () {
return "Quest Category operations" ;
}
@SubCommand (
desc = "Find quest category id number by its name" ,
usage = "<quest cat name>"
)
public void id ( ICommandSender sender , String args [] ) throws CommandException {
if ( args . length == 0 ){
sendError ( sender , "Please provide a name for the quest category" );
return ;
}
String catName = String . join ( " " , args ). toLowerCase ();
2023-06-05 22:12:48 -04:00
final Collection < QuestCategory > questCats = QuestController . Instance . categories . values ();
2023-06-05 21:31:26 -04:00
int count = 0 ;
for ( QuestCategory cat : questCats ){
if ( cat . getName (). toLowerCase (). contains ( catName )){
sendResult ( sender , String . format ( "Quest Cat \u00A7e%d\u00A77 - \u00A7c'%s'" , cat . id , cat . getName ()));
count ++ ;
}
}
if ( count == 0 ){
sendResult ( sender , String . format ( "No Quest Cat found with name: \u00A7c'%s'" , catName ));
}
}
2024-02-15 17:54:28 -05:00
2023-06-05 21:31:26 -04:00
@SubCommand (
2023-06-23 14:04:37 -04:00
desc = "Finish a quest category for a player" ,
2023-06-05 21:31:26 -04:00
usage = "<player> <questcatid>"
)
2023-06-23 14:04:37 -04:00
public void finish ( ICommandSender sender , String args [] ) throws CommandException {
2023-06-05 21:31:26 -04:00
String playername = args [ 0 ] ;
int questcatid ;
try {
questcatid = Integer . parseInt ( args [ 1 ] );
2024-02-15 17:54:28 -05:00
}
2023-06-05 21:31:26 -04:00
catch ( NumberFormatException ex ) {
sendError ( sender , "QuestCatID must be an integer: " + args [ 1 ] );
return ;
}
2024-02-15 17:54:28 -05:00
2023-06-05 21:31:26 -04:00
List < PlayerData > data = PlayerDataController . Instance . getPlayersData ( sender , playername );
if ( data . isEmpty ()) {
sendError ( sender , String . format ( "Unknown player '%s'" , playername ));
return ;
}
2024-02-15 17:54:28 -05:00
2023-06-05 22:12:48 -04:00
QuestCategory questCategory = QuestController . Instance . categories . get ( questcatid );
2023-06-05 21:31:26 -04:00
if ( questCategory == null ){
sendError ( sender , "Unknown QuestCatID: " + questcatid );
return ;
}
2023-06-05 21:55:02 -04:00
int count = 0 ;
2023-06-05 21:31:26 -04:00
for ( PlayerData playerdata : data ){
for ( Quest quest : questCategory . quests . values ()){
if ( playerdata . questData . activeQuests . containsKey ( quest . id )){
playerdata . questData . activeQuests . remove ( quest . id );
}
if ( quest . repeat == EnumQuestRepeat . RLDAILY || quest . repeat == EnumQuestRepeat . RLWEEKLY )
playerdata . questData . finishedQuests . put ( quest . id , System . currentTimeMillis ());
else
playerdata . questData . finishedQuests . put ( quest . id , sender . getEntityWorld (). getTotalWorldTime ());
if ( playerdata . player != null ){
Server . sendData (( EntityPlayerMP ) playerdata . player , EnumPacketClient . MESSAGE , "quest.completed" , quest . title );
Server . sendData (( EntityPlayerMP ) playerdata . player , EnumPacketClient . CHAT , "quest.completed" , ": " , quest . title );
}
2023-06-05 21:55:02 -04:00
count ++ ;
2023-06-05 21:31:26 -04:00
}
playerdata . save ();
sendResult ( sender , String . format ( "Completed Quest Cat \u00A7c'%s' \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'" , questCategory . getName (), questcatid , playerdata . playername ));
2023-06-05 21:55:02 -04:00
sendResult ( sender , String . format ( "Completed a total of \u00A7b%d \u00A77quests" , count ));
2023-06-05 21:31:26 -04:00
}
}
2023-06-23 14:04:37 -04:00
@SubCommand (
desc = "Stop a quest category for a players active quests" ,
usage = "<player> <questcatid>"
)
public void stop ( ICommandSender sender , String args [] ) throws CommandException {
String playername = args [ 0 ] ;
int questcatid ;
try {
questcatid = Integer . parseInt ( args [ 1 ] );
}
catch ( NumberFormatException ex ) {
sendError ( sender , "QuestCatID must be an integer: " + args [ 1 ] );
return ;
}
List < PlayerData > data = PlayerDataController . Instance . getPlayersData ( sender , playername );
if ( data . isEmpty ()) {
sendError ( sender , String . format ( "Unknown player '%s'" , playername ));
return ;
}
2023-06-23 14:35:54 -04:00
QuestCategory questCategory = QuestController . Instance . categories . get ( questcatid );
2023-06-23 14:04:37 -04:00
if ( questCategory == null ){
sendError ( sender , "Unknown QuestCatID: " + questcatid );
return ;
}
int count = 0 ;
for ( PlayerData playerdata : data ){
for ( Quest quest : questCategory . quests . values ()){
if ( playerdata . questData . activeQuests . containsKey ( quest . id )){
playerdata . questData . activeQuests . remove ( quest . id );
count ++ ;
}
}
playerdata . save ();
sendResult ( sender , String . format ( "Stopped Quest Cat \u00A7c'%s' \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'" , questCategory . getName (), questcatid , playerdata . playername ));
sendResult ( sender , String . format ( "Stopped a total of \u00A7b%d \u00A77quests" , count ));
}
}
@SubCommand (
desc = "Start a quest category for a player" ,
usage = "<player> <questcatid>"
)
public void start ( ICommandSender sender , String args [] ) throws CommandException {
String playername = args [ 0 ] ;
int questcatid ;
try {
questcatid = Integer . parseInt ( args [ 1 ] );
}
catch ( NumberFormatException ex ) {
sendError ( sender , "QuestCatID must be an integer: " + args [ 1 ] );
return ;
}
List < PlayerData > data = PlayerDataController . Instance . getPlayersData ( sender , playername );
if ( data . isEmpty ()) {
sendError ( sender , String . format ( "Unknown player '%s'" , playername ));
return ;
}
2023-06-23 14:35:54 -04:00
QuestCategory questCategory = QuestController . Instance . categories . get ( questcatid );
2023-06-23 14:04:37 -04:00
if ( questCategory == null ){
sendError ( sender , "Unknown QuestCatID: " + questcatid );
return ;
}
int count = 0 ;
for ( PlayerData playerdata : data ){
for ( Quest quest : questCategory . quests . values ()){
if ( ! playerdata . questData . activeQuests . containsKey ( quest . id )){
QuestData questData = new QuestData ( quest );
playerdata . questData . activeQuests . put ( quest . id , questData );
count ++ ;
if ( playerdata . player != null && questData . sendAlerts ){
Server . sendData (( EntityPlayerMP ) playerdata . player , EnumPacketClient . MESSAGE , "quest.newquest" , quest . title );
Server . sendData (( EntityPlayerMP ) playerdata . player , EnumPacketClient . CHAT , "quest.newquest" , ": " , quest . title );
}
}
}
playerdata . save ();
sendResult ( sender , String . format ( "Started Quest Cat \u00A7c'%s' \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'" , questCategory . getName (), questcatid , playerdata . playername ));
sendResult ( sender , String . format ( "Started a total of \u00A7b%d \u00A77quests" , count ));
}
}
2024-02-15 17:54:28 -05:00
2023-06-05 21:31:26 -04:00
@SubCommand (
2023-06-23 14:04:37 -04:00
desc = "Remove a quest cat from active/finished" ,
2023-06-05 21:31:26 -04:00
usage = "<player> <questcatid>"
)
2023-06-23 14:04:37 -04:00
public void remove ( ICommandSender sender , String args [] ) throws CommandException {
2023-06-05 21:31:26 -04:00
String playername = args [ 0 ] ;
int questcatid ;
try {
questcatid = Integer . parseInt ( args [ 1 ] );
}
catch ( NumberFormatException ex ) {
sendError ( sender , "QuestCatID must be an integer: " + args [ 1 ] );
return ;
}
List < PlayerData > data = PlayerDataController . Instance . getPlayersData ( sender , playername );
if ( data . isEmpty ()) {
sendError ( sender , String . format ( "Unknown player '%s'" , playername ));
return ;
}
2023-06-05 22:12:48 -04:00
QuestCategory questCategory = QuestController . Instance . categories . get ( questcatid );
2023-06-05 21:31:26 -04:00
if ( questCategory == null ){
sendError ( sender , "Unknown QuestCatID: " + questcatid );
return ;
}
2023-06-05 21:55:02 -04:00
int count = 0 ;
2023-06-05 21:31:26 -04:00
for ( PlayerData playerdata : data ){
for ( Quest quest : questCategory . quests . values ()){
playerdata . questData . activeQuests . remove ( quest . id );
playerdata . questData . finishedQuests . remove ( quest . id );
2023-06-05 21:55:02 -04:00
count ++ ;
2023-06-05 21:31:26 -04:00
}
playerdata . save ();
sendResult ( sender , String . format ( "Cleared Quest Cat \u00A7c'%s' \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'" , questCategory . getName (), questcatid , playerdata . playername ));
2023-06-05 21:55:02 -04:00
sendResult ( sender , String . format ( "Cleared a total of \u00A7b%d \u00A77quests" , count ));
2023-06-05 21:31:26 -04:00
}
}
}