From 767c4402e7ff6c42de513a5c1c17ed612463e6ea Mon Sep 17 00:00:00 2001 From: P0nk Date: Wed, 25 Sep 2024 07:21:27 +0200 Subject: [PATCH] Route chr creation to dummy CharacterCreator --- .../java/client/creator/CharacterCreator.java | 10 +++---- src/main/java/net/ChannelDependencies.java | 12 ++++++--- src/main/java/net/PacketProcessor.java | 2 +- src/main/java/net/server/Server.java | 26 ++++++++++++------- .../handlers/login/CreateCharHandler.java | 8 ++++++ 5 files changed, 38 insertions(+), 20 deletions(-) diff --git a/src/main/java/client/creator/CharacterCreator.java b/src/main/java/client/creator/CharacterCreator.java index 77bb7a5af1..9cf0802d45 100644 --- a/src/main/java/client/creator/CharacterCreator.java +++ b/src/main/java/client/creator/CharacterCreator.java @@ -3,16 +3,16 @@ package client.creator; import client.inventory.Item; import constants.id.ItemId; import constants.id.MapId; -import database.character.CharacterSaver; +import database.character.CharacterRepository; public class CharacterCreator { - private final CharacterSaver chrSaver; + private final CharacterRepository chrRepository; - public CharacterCreator(CharacterSaver chrSaver) { - this.chrSaver = chrSaver; + public CharacterCreator(CharacterRepository chrRepository) { + this.chrRepository = chrRepository; } - public boolean createBeginner(NewCharacterSpec spec, int accountId, int worldId) { + public boolean createNew(NewCharacterSpec spec, int accountId, int worldId) { int mapId = getStartingMap(spec.type()); Item guide = getStarterGuide(spec.type()); // TODO, save: diff --git a/src/main/java/net/ChannelDependencies.java b/src/main/java/net/ChannelDependencies.java index 5b96fc2814..9944ba7bde 100644 --- a/src/main/java/net/ChannelDependencies.java +++ b/src/main/java/net/ChannelDependencies.java @@ -1,11 +1,13 @@ package net; import client.command.CommandsExecutor; +import client.creator.CharacterCreator; import client.processor.action.MakerProcessor; import client.processor.npc.FredrickProcessor; import database.character.CharacterLoader; import database.character.CharacterSaver; import database.drop.DropProvider; +import lombok.Builder; import server.shop.ShopFactory; import service.BanService; import service.NoteService; @@ -16,14 +18,16 @@ import java.util.Objects; /** * @author Ponk */ +@Builder public record ChannelDependencies( - CharacterLoader characterLoader, CharacterSaver characterSaver, NoteService noteService, - FredrickProcessor fredrickProcessor, MakerProcessor makerProcessor, DropProvider dropProvider, - CommandsExecutor commandsExecutor, ShopFactory shopFactory, TransitionService transitionService, - BanService banService + CharacterCreator characterCreator, CharacterLoader characterLoader, CharacterSaver characterSaver, + NoteService noteService, FredrickProcessor fredrickProcessor, MakerProcessor makerProcessor, + DropProvider dropProvider, CommandsExecutor commandsExecutor, ShopFactory shopFactory, + TransitionService transitionService, BanService banService ) { public ChannelDependencies { + Objects.requireNonNull(characterCreator); Objects.requireNonNull(characterLoader); Objects.requireNonNull(characterSaver); Objects.requireNonNull(noteService); diff --git a/src/main/java/net/PacketProcessor.java b/src/main/java/net/PacketProcessor.java index 2f24c7b078..5ad7b2d899 100644 --- a/src/main/java/net/PacketProcessor.java +++ b/src/main/java/net/PacketProcessor.java @@ -286,7 +286,7 @@ public final class PacketProcessor { registerHandler(RecvOpcode.SERVERLIST_REQUEST, new ServerlistRequestHandler()); registerHandler(RecvOpcode.SERVERSTATUS_REQUEST, new ServerStatusRequestHandler()); registerHandler(RecvOpcode.CHECK_CHAR_NAME, new CheckCharNameHandler()); - registerHandler(RecvOpcode.CREATE_CHAR, new CreateCharHandler()); + registerHandler(RecvOpcode.CREATE_CHAR, new CreateCharHandler(channelDeps.characterCreator())); registerHandler(RecvOpcode.DELETE_CHAR, new DeleteCharHandler()); registerHandler(RecvOpcode.VIEW_ALL_CHAR, new ViewAllCharHandler()); registerHandler(RecvOpcode.PICK_ALL_CHAR, new ViewAllCharSelectedHandler()); diff --git a/src/main/java/net/server/Server.java b/src/main/java/net/server/Server.java index 931014bf01..eeb840dfe0 100644 --- a/src/main/java/net/server/Server.java +++ b/src/main/java/net/server/Server.java @@ -27,6 +27,7 @@ import client.Family; import client.SkillFactory; import client.command.CommandContext; import client.command.CommandsExecutor; +import client.creator.CharacterCreator; import client.inventory.Item; import client.inventory.ItemFactory; import client.inventory.manipulator.CashIdGenerator; @@ -1004,24 +1005,29 @@ public class Server { return hikariConfig; } + // TODO: set up proper dependency injection with a framework such as Dagger or Guice. private ChannelDependencies registerChannelDependencies(PgDatabaseConnection connection) { CharacterRepository characterRepository = new CharacterRepository(); MonsterCardRepository monsterCardRepository = new MonsterCardRepository(connection); - CharacterLoader characterLoader = new CharacterLoader(monsterCardRepository); CharacterSaver characterSaver = new CharacterSaver(connection, characterRepository, monsterCardRepository); TransitionService transitionService = new TransitionService(characterSaver); - BanService banService = new BanService(transitionService); NoteService noteService = new NoteService(new NoteDao(connection)); - MakerProcessor makerProcessor = new MakerProcessor(new MakerInfoProvider(new MakerRepository(connection))); - FredrickProcessor fredrickProcessor = new FredrickProcessor(noteService); DropProvider dropProvider = new DropProvider(new DropRepository(connection)); ShopFactory shopFactory = new ShopFactory(new ShopDao(connection)); - CommandContext commandContext = new CommandContext(null, dropProvider, shopFactory, - characterSaver, transitionService); - CommandsExecutor commandsExecutor = new CommandsExecutor(commandContext); - ChannelDependencies channelDependencies = new ChannelDependencies(characterLoader, characterSaver, noteService, - fredrickProcessor, makerProcessor, dropProvider, commandsExecutor, shopFactory, transitionService, - banService); + ChannelDependencies channelDependencies = ChannelDependencies.builder() + .characterCreator(new CharacterCreator(characterRepository)) + .characterLoader(new CharacterLoader(monsterCardRepository)) + .characterSaver(characterSaver) + .noteService(noteService) + .fredrickProcessor(new FredrickProcessor(noteService)) + .makerProcessor(new MakerProcessor(new MakerInfoProvider(new MakerRepository(connection)))) + .dropProvider(dropProvider) + .commandsExecutor(new CommandsExecutor(new CommandContext(null, dropProvider, shopFactory, + characterSaver, transitionService))) + .shopFactory(shopFactory) + .transitionService(transitionService) + .banService(new BanService(transitionService)) + .build(); PacketProcessor.registerGameHandlerDependencies(channelDependencies); diff --git a/src/main/java/net/server/handlers/login/CreateCharHandler.java b/src/main/java/net/server/handlers/login/CreateCharHandler.java index fb47f4d607..ce74b8e83f 100644 --- a/src/main/java/net/server/handlers/login/CreateCharHandler.java +++ b/src/main/java/net/server/handlers/login/CreateCharHandler.java @@ -23,6 +23,7 @@ package net.server.handlers.login; import client.Client; import client.SkinColor; +import client.creator.CharacterCreator; import client.creator.JobType; import client.creator.NewCharacterSpec; import client.creator.novice.BeginnerCreator; @@ -35,6 +36,11 @@ import tools.PacketCreator; import java.util.Optional; public final class CreateCharHandler extends AbstractPacketHandler { + private final CharacterCreator characterCreator; + + public CreateCharHandler(CharacterCreator characterCreator) { + this.characterCreator = characterCreator; + } @Override public void handlePacket(InPacket p, Client c) { @@ -52,6 +58,8 @@ public final class CreateCharHandler extends AbstractPacketHandler { .gender(p.readByte()) .build(); + characterCreator.createNew(spec, c.getAccID(), c.getWorld()); + int status = switch (spec.type()) { case KNIGHT_OF_CYGNUS -> NoblesseCreator.createCharacter(c, spec.name(), spec.face(), spec.hair() + spec.hairColor(), spec.skin().getId(), spec.topItemId(), spec.bottomItemId(), spec.shoesItemId(), spec.weaponItemId(),