Skip to content

Commit

Permalink
Changed the professions manager, now when you click on any profession…
Browse files Browse the repository at this point in the history
… it open corresponding building screen, to hire the pawns in there.
  • Loading branch information
remmintan committed Dec 26, 2024
1 parent dd7a09a commit 4dd9833
Show file tree
Hide file tree
Showing 6 changed files with 86 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,5 @@ public interface IClientProfessionManager extends IProfessionsManager {

void updateProfessions(List<IProfessionEssentialInfo> info);

void openBuildingHireScreen(String professionId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
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.core.utils.CoreModUtils;
import net.remmintan.mods.minefortress.networking.c2s.C2SOpenBuildingHireScreen;
import net.remmintan.mods.minefortress.networking.c2s.ServerboundChangeProfessionStatePacket;
import net.remmintan.mods.minefortress.networking.helpers.FortressChannelNames;
import net.remmintan.mods.minefortress.networking.helpers.FortressClientNetworkHelper;
Expand All @@ -33,18 +35,18 @@ public void initProfessions(List<ProfessionFullInfo> fullInfos, String treeJson)

@Override
public void increaseAmount(String professionId, boolean alreadyCharged) {
if("colonist".equals(professionId)) return;
if ("colonist".equals(professionId)) return;
final var profession = this.getProfession(professionId);
final var unlockedForNormalIncrease = super.isRequirementsFulfilled(profession, CountProfessionals.INCREASE, true);
final var unlockedForHireMenu = super.isRequirementsFulfilled(profession, CountProfessionals.DONT_COUNT, false);
if(
unlockedForNormalIncrease == ProfessionResearchState.UNLOCKED ||
profession.isHireMenu() && unlockedForHireMenu == ProfessionResearchState.UNLOCKED
if (
unlockedForNormalIncrease == ProfessionResearchState.UNLOCKED ||
profession.isHireMenu() && unlockedForHireMenu == ProfessionResearchState.UNLOCKED
) {
final var change = ServerboundChangeProfessionStatePacket.AmountChange.ADD;
final var packet = new ServerboundChangeProfessionStatePacket(professionId, change);
FortressClientNetworkHelper.send(FortressChannelNames.FORTRESS_PROFESSION_STATE_CHANGE, packet);
} else if(profession.isHireMenu() && unlockedForHireMenu == ProfessionResearchState.LOCKED_PARENT) {
} else if (profession.isHireMenu() && unlockedForHireMenu == ProfessionResearchState.LOCKED_PARENT) {
final var parent = profession.getParent();
final var message = Text.literal("§cCan't hire " + profession.getTitle() + "§c. " +
"You need to unlock the " + parent.getTitle() + "§c profession first.");
Expand All @@ -57,10 +59,10 @@ public void increaseAmount(String professionId, boolean alreadyCharged) {

@Override
public void decreaseAmount(String professionId) {
if("colonist".equals(professionId)) return;
if ("colonist".equals(professionId)) return;
final var profession = this.getProfession(professionId);
final var cantRemove = profession.cantVoluntaryRemoveFromThisProfession();
if(cantRemove){
if (cantRemove) {
final var message = Text.literal("§cCan't remove pawn from profession: " + profession.getTitle());
MinecraftClient.getInstance().setScreen(null);
Optional.ofNullable(MinecraftClient.getInstance().player)
Expand All @@ -76,12 +78,35 @@ public void decreaseAmount(String professionId) {

@Override
public void updateProfessions(List<IProfessionEssentialInfo> info) {
for(var professionEssentialInfo : info) {
for (var professionEssentialInfo : info) {
final IProfession profession = getProfession(professionEssentialInfo.id());
if(profession != null) {
if (profession != null) {
profession.setAmount(professionEssentialInfo.amount());
}
}
}

@Override
public void openBuildingHireScreen(String professionId) {
final var profession = this.getProfession(professionId);
final var hasBuilding = fortressManagerSupplier.get().hasRequiredBuilding(profession.getRequirementType(), profession.getRequirementLevel(), 0);
if (hasBuilding) {
final var packet = new C2SOpenBuildingHireScreen(professionId);
FortressClientNetworkHelper.send(C2SOpenBuildingHireScreen.CHANNEL, packet);
} else {
final var type = profession.getRequirementType();
final var level = profession.getRequirementLevel();
final var blueprintId = type.getBlueprintIds().get(level);
CoreModUtils.getBlueprintManager()
.getBlueprintMetadataManager()
.getByBlueprintId(blueprintId)
.ifPresent(it -> {
final var message = Text.literal("§cCan't hire " + profession.getTitle() + "§c. " +
"You need to build a " + it.getName() + "§c first.");
MinecraftClient.getInstance().setScreen(null);
Optional.ofNullable(MinecraftClient.getInstance().player)
.ifPresent(p -> p.sendMessage(message, false));
});
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
import net.minecraft.util.Identifier;
import net.minecraft.util.math.MathHelper;
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.IProfessionsManager;
import net.remmintan.mods.minefortress.core.interfaces.professions.ProfessionResearchState;
import net.remmintan.mods.minefortress.gui.util.GuiUtils;

Expand All @@ -28,15 +28,15 @@ public class ProfessionWidget {
private ProfessionWidget parent;
private final List<ProfessionWidget> children = new ArrayList<>();
private final IProfession profession;
private final IProfessionsManager professionManager;
private final IClientProfessionManager professionManager;

private int x = 0;
private int y = 0;

private final int width;
private final MinecraftClient client;

public ProfessionWidget(IProfession profession, IProfessionsManager professionManager) {
public ProfessionWidget(IProfession profession, IClientProfessionManager professionManager) {
this.profession = profession;
this.professionManager = professionManager;
client = MinecraftClient.getInstance();
Expand Down Expand Up @@ -249,12 +249,8 @@ public ProfessionResearchState isUnlocked(boolean countProfessionals) {
);
}

public void onClick(int button) {
if(button == 0) {
professionManager.increaseAmount(profession.getId(), false);
} else if(button == 1) {
professionManager.decreaseAmount(profession.getId());
}
public void onClick() {
professionManager.openBuildingHireScreen(profession.getId());
}

public ProfessionWidget getParent() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
import net.minecraft.util.Identifier;
import net.minecraft.util.math.MathHelper;
import net.remmintan.mods.minefortress.core.interfaces.client.IClientManagersProvider;
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.IProfessionsManager;
import org.jetbrains.annotations.NotNull;

import java.util.LinkedList;
Expand Down Expand Up @@ -33,9 +33,8 @@ public class ProfessionsLayer {
private final int panExpand = 100;


public ProfessionsLayer(IClientManagersProvider client) {
final IProfessionsManager professionManager = client.get_ClientFortressManager().getProfessionManager();
ProfessionWidget root = createProfessionsTree(professionManager);
public ProfessionsLayer(IClientManagersProvider managersProvider) {
ProfessionWidget root = createProfessionsTree(managersProvider.get_ClientFortressManager().getProfessionManager());

ProfessionsPositioner.arrangeForTree(root);
for(ProfessionWidget widget:widgets) {
Expand Down Expand Up @@ -100,7 +99,7 @@ private void init() {
}

@NotNull
private ProfessionWidget createProfessionsTree(IProfessionsManager professionManager) {
private ProfessionWidget createProfessionsTree(IClientProfessionManager professionManager) {
final IProfession rootProfession = professionManager.getRootProfession();
final ProfessionWidget rootWidget = new ProfessionWidget(rootProfession, professionManager);

Expand All @@ -109,7 +108,7 @@ private ProfessionWidget createProfessionsTree(IProfessionsManager professionMan
return rootWidget;
}

private void createTreeNode(ProfessionWidget parentWidget, IProfession parent, IProfessionsManager professionManager) {
private void createTreeNode(ProfessionWidget parentWidget, IProfession parent, IClientProfessionManager professionManager) {
final List<IProfession> children = parent.getChildren();
this.widgets.add(parentWidget);
for(IProfession child:children) {
Expand Down Expand Up @@ -144,13 +143,13 @@ public void drawWidgetTooltip(DrawContext drawContext, int mouseX, int mouseY, i
this.alpha = bl ? MathHelper.clamp(this.alpha + 0.02f, 0.0f, 0.3f) : MathHelper.clamp(this.alpha - 0.04f, 0.0f, 1.0f);
}

public void onClick(double mouseX, double mouseY, int button) {
public void onClick(double mouseX, double mouseY, int _b) {
int oX = MathHelper.floor(this.originX);
int oY = MathHelper.floor(this.originY);
if (mouseX > 0 && mouseX < layerWidth && mouseY > 0 && mouseY < layerHeight) {
for (ProfessionWidget professionWidget : this.widgets) {
if (professionWidget.shouldNotRender(oX, oY, (int) mouseX, (int) mouseY)) continue;
professionWidget.onClick(button);
professionWidget.onClick();
break;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package net.remmintan.mods.minefortress.networking.c2s

import net.minecraft.network.PacketByteBuf
import net.minecraft.screen.NamedScreenHandlerFactory
import net.minecraft.server.MinecraftServer
import net.minecraft.server.network.ServerPlayerEntity
import net.remmintan.mods.minefortress.core.interfaces.networking.FortressC2SPacket

class C2SOpenBuildingHireScreen(val profId: String) : FortressC2SPacket {

companion object {
const val CHANNEL = "open_building_hire_screen"
}

constructor(buf: PacketByteBuf) : this(buf.readString())

override fun write(buf: PacketByteBuf) {
buf.writeString(profId)
}

override fun handle(server: MinecraftServer?, player: ServerPlayerEntity?) {
val provider = getManagersProvider(server, player)
val manager = provider.professionsManager

val profession = manager.getProfession(profId)
val requirementType = profession.getRequirementType()
val requirementLevel = profession.getRequirementLevel()
val buildings = provider.buildingsManager.getBuildings(requirementType, requirementLevel)
if (buildings.isNotEmpty()) {
val building = buildings[0]
if (building is NamedScreenHandlerFactory) {
player!!.openHandledScreen(building)
//player.currentScreenHandler.
// TODO tell screen handler or building to open hire menu
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ public static void registerReceivers() {
registerReceiver(C2SUpdateScreenProperty.CHANNEL, C2SUpdateScreenProperty::new);
registerReceiver(C2SOpenBuildingScreen.CHANNEL, C2SOpenBuildingScreen::new);
registerReceiver(C2SHireProfessional.CHANNEL, C2SHireProfessional::new);
registerReceiver(C2SOpenBuildingHireScreen.CHANNEL, C2SOpenBuildingHireScreen::new);
}

private static void registerReceiver(String channelName, Function<PacketByteBuf, FortressC2SPacket> packetConstructor) {
Expand Down

0 comments on commit 4dd9833

Please sign in to comment.