Skip to content

Commit

Permalink
WIP Fixing bugs in the workforce tab
Browse files Browse the repository at this point in the history
  • Loading branch information
remmintan committed Dec 25, 2024
1 parent 13ed517 commit 01e4c11
Show file tree
Hide file tree
Showing 18 changed files with 48 additions and 537 deletions.
Original file line number Diff line number Diff line change
@@ -1,24 +1,16 @@
package net.remmintan.mods.minefortress.core.interfaces.client;

import net.minecraft.client.MinecraftClient;
import net.minecraft.util.math.BlockPos;
import net.remmintan.mods.minefortress.core.FortressGamemode;
import net.remmintan.mods.minefortress.core.FortressState;
import net.remmintan.mods.minefortress.core.interfaces.IFortressManager;
import net.remmintan.mods.minefortress.core.interfaces.combat.IClientFightManager;
import net.remmintan.mods.minefortress.core.interfaces.professions.IClientProfessionManager;
import net.remmintan.mods.minefortress.core.interfaces.professions.IHireInfo;
import net.remmintan.mods.minefortress.core.interfaces.resources.IClientResourceManager;

import java.util.List;
import java.util.Map;

public interface IClientFortressManager extends IFortressManager {

void jumpToCampfire();

void open_HireScreen(MinecraftClient client, String screenName, Map<String, IHireInfo> professions, List<String> additionalInfo);

void sync(
int colonistsCount,
BlockPos fortressCenter,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,10 @@
import net.remmintan.mods.minefortress.core.dtos.professions.ProfessionFullInfo;

import java.util.List;
import java.util.Map;

public interface IClientProfessionManager extends IProfessionsManager {
void initProfessions(List<ProfessionFullInfo> fullInfos, String treeJson);

void updateProfessions(List<IProfessionEssentialInfo> info);

void syncCurrentScreenHandler(Map<String, IHireInfo> hireInfos, List<String> additionalInfo);
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,6 @@

public interface IServerProfessionsManager extends IProfessionsManager, IServerManager {
Optional<String> getProfessionsWithAvailablePlaces(boolean professionRequiresReservation);
void closeHireMenu();
void sendHireRequestToCurrentHandler(String professionId);
void openHireMenu(ProfessionsHireTypes hireType, ServerPlayerEntity player);
EntityType<? extends LivingEntity> getEntityTypeForProfession(String professionId);
void decreaseAmount(String professionId, boolean b);
void scheduleSync();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,6 @@ class BuildingScreen(handler: BuildingScreenHandler, playerInventory: PlayerInve
override fun init() {
super.init()
resizeAllTabs()

workforceTab.init()
}

override fun resize(client: MinecraftClient?, width: Int, height: Int) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import net.minecraft.text.Text
import net.remmintan.mods.minefortress.core.utils.CoreModUtils
import net.remmintan.mods.minefortress.gui.building.handlers.IWorkforceTabHandler
import net.remmintan.mods.minefortress.gui.widget.*
import kotlin.properties.Delegates

class WorkforceTab(private val handler: IWorkforceTabHandler, private val textRenderer: TextRenderer) : ResizableTab {

Expand All @@ -19,21 +20,13 @@ class WorkforceTab(private val handler: IWorkforceTabHandler, private val textRe
private val hireButtons = mutableListOf<HireButtonWithInfo>()
private val drawables = mutableListOf<Drawable>()

fun init() {
drawables.clear()
hireButtons.clear()

val professions = handler.getProfessions()
val rowY = y + 40
val leftX = x + 10
val rightX = x + backgroundWidth - 10

for (i in professions.indices) {
addNewRow(professions[i], rowY + i * 30, leftX, rightX)
}
}
private var initialized: Boolean by Delegates.vetoable(false) { _, _, new -> new }

fun tick() {
if (!initialized) {
init()
initialized = true
}
for ((button, costs, profId) in hireButtons) {
val enoughPlaceForNew =
(handler.getCurrentCount(profId) + handler.getHireQueue(profId)) < handler.getMaxCount(profId)
Expand All @@ -49,6 +42,22 @@ class WorkforceTab(private val handler: IWorkforceTabHandler, private val textRe
return hireButtons.any { it.button.mouseClicked(mouseX, mouseY, button) }
}

private fun init() {
drawables.clear()
hireButtons.clear()

val professions = handler.getProfessions()
val rowY = y + 40
val leftX = x + 10
val rightX = x + backgroundWidth - 10

for (i in professions.indices) {
addNewRow(professions[i], rowY + i * 30, leftX, rightX)
}


}

private fun addNewRow(profId: String, rowY: Int, leftX: Int, rightX: Int) {
this.addDrawable(
ProgressArrowWidget(
Expand Down
13 changes: 0 additions & 13 deletions src/main/java/org/minefortress/fortress/ClientFortressManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import net.remmintan.mods.minefortress.core.interfaces.client.IHoveredBlockProvider;
import net.remmintan.mods.minefortress.core.interfaces.combat.IClientFightManager;
import net.remmintan.mods.minefortress.core.interfaces.professions.IClientProfessionManager;
import net.remmintan.mods.minefortress.core.interfaces.professions.IHireInfo;
import net.remmintan.mods.minefortress.core.interfaces.resources.IClientResourceManager;
import net.remmintan.mods.minefortress.core.utils.CoreModUtils;
import net.remmintan.mods.minefortress.networking.c2s.C2SJumpToCampfire;
Expand All @@ -20,11 +19,6 @@
import org.minefortress.fight.ClientFightManager;
import org.minefortress.fortress.resources.client.ClientResourceManagerImpl;
import org.minefortress.professions.ClientProfessionManager;
import org.minefortress.professions.hire.ClientHireHandler;
import org.minefortress.renderer.gui.hire.HirePawnScreen;

import java.util.List;
import java.util.Map;

public final class ClientFortressManager implements IClientFortressManager {

Expand Down Expand Up @@ -104,13 +98,6 @@ private void resetBuildEditState() {
}
}

@Override
public void open_HireScreen(MinecraftClient client, String screenName, Map<String, IHireInfo> professions, List<String> additionalInfo) {
final var handler = new ClientHireHandler(screenName, professions, additionalInfo);
final var screen = new HirePawnScreen(handler);
client.setScreen(screen);
}

@Override
public boolean isConnectedToTheServer() {
return initialized && connectedToTheServer;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,15 @@
import net.remmintan.mods.minefortress.core.dtos.professions.IProfessionEssentialInfo;
import net.remmintan.mods.minefortress.core.dtos.professions.ProfessionFullInfo;
import net.remmintan.mods.minefortress.core.interfaces.IFortressManager;
import net.remmintan.mods.minefortress.core.interfaces.professions.*;
import net.remmintan.mods.minefortress.core.interfaces.professions.CountProfessionals;
import net.remmintan.mods.minefortress.core.interfaces.professions.IClientProfessionManager;
import net.remmintan.mods.minefortress.core.interfaces.professions.IProfession;
import net.remmintan.mods.minefortress.core.interfaces.professions.ProfessionResearchState;
import net.remmintan.mods.minefortress.networking.c2s.ServerboundChangeProfessionStatePacket;
import net.remmintan.mods.minefortress.networking.helpers.FortressChannelNames;
import net.remmintan.mods.minefortress.networking.helpers.FortressClientNetworkHelper;
import org.minefortress.renderer.gui.hire.HirePawnScreen;

import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Supplier;
import java.util.stream.Collectors;
Expand Down Expand Up @@ -85,15 +86,4 @@ public void updateProfessions(List<IProfessionEssentialInfo> info) {
}
}

@Override
public void syncCurrentScreenHandler(Map<String, IHireInfo> hireInfos, List<String> additionalProfessionsInfo) {
final var currentScreen = MinecraftClient.getInstance().currentScreen;
if (currentScreen instanceof HirePawnScreen screen) {
final var handler = screen.getHandler();
if(handler != null) {
handler.sync(hireInfos, additionalProfessionsInfo);
}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -10,25 +10,26 @@
import net.remmintan.mods.minefortress.core.dtos.professions.ProfessionFullInfo;
import net.remmintan.mods.minefortress.core.interfaces.IFortressManager;
import net.remmintan.mods.minefortress.core.interfaces.entities.pawns.IProfessional;
import net.remmintan.mods.minefortress.core.interfaces.professions.*;
import net.remmintan.mods.minefortress.core.interfaces.server.IServerFortressManager;
import net.remmintan.mods.minefortress.core.interfaces.professions.CountProfessionals;
import net.remmintan.mods.minefortress.core.interfaces.professions.IProfession;
import net.remmintan.mods.minefortress.core.interfaces.professions.IServerProfessionsManager;
import net.remmintan.mods.minefortress.core.interfaces.professions.ProfessionResearchState;
import net.remmintan.mods.minefortress.core.interfaces.server.IServerManagersProvider;
import net.remmintan.mods.minefortress.core.interfaces.server.ITickableManager;
import net.remmintan.mods.minefortress.core.interfaces.server.IWritableManager;
import net.remmintan.mods.minefortress.networking.helpers.FortressChannelNames;
import net.remmintan.mods.minefortress.networking.helpers.FortressServerNetworkHelper;
import net.remmintan.mods.minefortress.networking.s2c.ClientboundProfessionSyncPacket;
import net.remmintan.mods.minefortress.networking.s2c.ClientboundProfessionsInitPacket;
import net.remmintan.mods.minefortress.networking.s2c.S2COpenHireMenuPacket;
import net.remmintan.mods.minefortress.networking.s2c.SyncHireProgress;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.minefortress.entity.Colonist;
import org.minefortress.fortress.ServerFortressManager;
import org.minefortress.professions.hire.ServerHireHandler;
import org.slf4j.LoggerFactory;

import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Supplier;
import java.util.stream.Collectors;

Expand All @@ -42,8 +43,6 @@ public final class ServerProfessionManager extends ProfessionManager implements
private String professionsTree;
private boolean needsUpdate = false;

private final Map<ProfessionsHireTypes, ServerHireHandler> hireHandlers = new HashMap<>();
private ServerHireHandler currentHireHandler;

private final Supplier<IServerManagersProvider> serverManagersProviderSupplier;

Expand All @@ -53,41 +52,6 @@ public ServerProfessionManager(Supplier<IFortressManager> fortressManagerSupplie
this.serverManagersProviderSupplier = serverManagersProviderSupplier;
}

public void openHireMenu(ProfessionsHireTypes hireType, ServerPlayerEntity player) {
currentHireHandler = hireHandlers.computeIfAbsent(hireType, k -> new ServerHireHandler(k.getIds(), this));
final var professions = currentHireHandler.getProfessions();
final var additionalInfo = currentHireHandler.getUnlockedProfessions();
final var screenName = hireType.getScreenName();
final var packet = new S2COpenHireMenuPacket(screenName, professions, additionalInfo);
FortressServerNetworkHelper.send(player, S2COpenHireMenuPacket.CHANNEL, packet);
}

@Override
public void closeHireMenu() {
currentHireHandler = null;
}

@Override
public void sendHireRequestToCurrentHandler(String professionId) {
if(currentHireHandler != null) {
final var profession = getProfession(professionId);
if(!profession.isHireMenu()) {
throw new IllegalArgumentException("Profession " + professionId + " is not a hire menu profession");
}
final var canHire = isRequirementsFulfilled(profession, CountProfessionals.INCREASE, true);
final var abstractFortressManager = (IServerFortressManager)fortressManagerSupplier.get();
if(canHire == ProfessionResearchState.UNLOCKED && getFreeColonists() > 0 && abstractFortressManager instanceof ServerFortressManager fsm) {
final var resourceManager = serverManagersProviderSupplier.get().getResourceManager();
resourceManager.removeItems(profession.getItemsRequirement());
fsm.getPawnWithoutAProfession().ifPresent(Colonist::reserveColonist);
fsm.scheduleSync();
currentHireHandler.hire(professionId);
}
} else {
throw new IllegalStateException("No current hire handler");
}
}

@Override
public void increaseAmount(String professionId, boolean itemsAlreadyCharged) {
final IProfession profession = super.getProfession(professionId);
Expand Down Expand Up @@ -130,12 +94,6 @@ public void decreaseAmount(String professionId, boolean force) {
public void tick(@Nullable ServerPlayerEntity player) {
if(player == null) return;

hireHandlers.forEach((k, v) -> v.tick());
if(currentHireHandler != null) {
final var packet = new SyncHireProgress(currentHireHandler.getProfessions(), currentHireHandler.getUnlockedProfessions());
FortressServerNetworkHelper.send(player, SyncHireProgress.CHANNEL, packet);
}

tickRemoveFromProfession();

if(needsUpdate) {
Expand Down

This file was deleted.

Loading

0 comments on commit 01e4c11

Please sign in to comment.