From bec8887a7681727f20366cbf34f1795a35a6cad5 Mon Sep 17 00:00:00 2001 From: Raycoms Date: Thu, 31 Jan 2019 10:23:51 -0200 Subject: [PATCH 1/4] Increment structurize, improve citizen home assignment --- build.properties | 2 +- .../api/util/constant/WindowConstants.java | 35 +++++++++ .../client/gui/WindowAssignCitizen.java | 74 +++++++++---------- .../messages/AssignUnassignMessage.java | 10 ++- .../minecolonies/gui/windowassigncitizen.xml | 9 ++- .../assets/minecolonies/lang/en_us.lang | 8 +- .../models/block/blockhutbaker.json | 2 +- 7 files changed, 92 insertions(+), 48 deletions(-) diff --git a/build.properties b/build.properties index 950953e6416..4c49bd2c96f 100644 --- a/build.properties +++ b/build.properties @@ -13,4 +13,4 @@ tinker_version=2.10.0.+ dynamic_tree_version=0.7.+ jei_version=4.8.5.147 c_b_version=14.0.128 -structurize_version=0.10.44-ALPHA +structurize_version=0.10.45-ALPHA diff --git a/src/api/java/com/minecolonies/api/util/constant/WindowConstants.java b/src/api/java/com/minecolonies/api/util/constant/WindowConstants.java index 0b85dd3f81a..ba63fc074d4 100644 --- a/src/api/java/com/minecolonies/api/util/constant/WindowConstants.java +++ b/src/api/java/com/minecolonies/api/util/constant/WindowConstants.java @@ -1090,6 +1090,41 @@ public final class WindowConstants public static final String INPUT_QTY = "qty"; public static final String BUTTON_REQUEST = "request"; + /** + * Id of the done button in the GUI. + */ + public static final String BUTTON_DONE = "done"; + + /** + * Id of the citizen name in the GUI. + */ + public static final String CITIZEN_LABEL = "citizen"; + + /** + * Id of the citizen list in the GUI. + */ + public static final String CITIZEN_LIST = "unassigned"; + + /** + * Assign button of the gui. + */ + public static final String CITIZEN_DONE = "done"; + + /** + * Link to the xml file of the window. + */ + public static final String ASSIGN_CITIZEN_RESOURCE_SUFFIX = ":gui/windowAssignCitizen.xml"; + + /** + * Id of the job label in the GUI. + */ + public static final String CITIZEN_JOB = "job"; + + /** + * Id of the job label in the GUI. + */ + public static final String CITIZEN_LIVING = "living"; + /** * public constructor to hide implicit public one. */ diff --git a/src/main/java/com/minecolonies/coremod/client/gui/WindowAssignCitizen.java b/src/main/java/com/minecolonies/coremod/client/gui/WindowAssignCitizen.java index 8bb9c437eab..895589497d3 100644 --- a/src/main/java/com/minecolonies/coremod/client/gui/WindowAssignCitizen.java +++ b/src/main/java/com/minecolonies/coremod/client/gui/WindowAssignCitizen.java @@ -1,5 +1,6 @@ package com.minecolonies.coremod.client.gui; +import com.minecolonies.api.util.BlockPosUtil; import com.minecolonies.api.util.LanguageHandler; import com.minecolonies.api.util.constant.Constants; import com.minecolonies.blockout.Pane; @@ -11,6 +12,7 @@ import com.minecolonies.coremod.MineColonies; import com.minecolonies.coremod.colony.CitizenDataView; import com.minecolonies.coremod.colony.ColonyView; +import com.minecolonies.coremod.colony.buildings.workerbuildings.BuildingBarracksTower; import com.minecolonies.coremod.colony.buildings.workerbuildings.BuildingHome; import com.minecolonies.coremod.colony.buildings.views.AbstractBuildingView; import com.minecolonies.coremod.network.messages.AssignUnassignMessage; @@ -22,57 +24,29 @@ import java.util.List; import java.util.stream.Collectors; +import static com.minecolonies.api.util.constant.WindowConstants.*; + /** * Window for the hiring or firing of a worker. */ public class WindowAssignCitizen extends Window implements ButtonHandler { /** - * Id of the done button in the GUI. - */ - private static final String BUTTON_DONE = "done"; - - /** - * Id of the cancel button in the GUI. - */ - private static final String BUTTON_CANCEL = "cancel"; - - /** - * Id of the citizen name in the GUI. - */ - private static final String CITIZEN_LABEL = "citizen"; - - /** - * Id of the citizen list in the GUI. - */ - private static final String CITIZEN_LIST = "unassigned"; - - /** - * Assign button of the gui. - */ - private static final String CITIZEN_DONE = "done"; - - /** - * Link to the xml file of the window. - */ - private static final String BUILDING_NAME_RESOURCE_SUFFIX = ":gui/windowAssignCitizen.xml"; - - /** - * Id of the job label in the GUI. - */ - private static final String CITIZEN_JOB = "job"; - /** + * * The view of the current building. */ private final AbstractBuildingView building; + /** * List of citizens which can be assigned. */ private final ScrollingList citizenList; + /** * The colony. */ private final ColonyView colony; + /** * Contains all the citizens. */ @@ -86,7 +60,7 @@ public class WindowAssignCitizen extends Window implements ButtonHandler */ public WindowAssignCitizen(final ColonyView c, final BlockPos buildingId) { - super(Constants.MOD_ID + BUILDING_NAME_RESOURCE_SUFFIX); + super(Constants.MOD_ID + ASSIGN_CITIZEN_RESOURCE_SUFFIX); this.colony = c; building = colony.getBuilding(buildingId); citizenList = findPaneOfTypeByID(CITIZEN_LIST, ScrollingList.class); @@ -103,8 +77,8 @@ private void updateCitizens() //Removes all citizens which already have a job. citizens = colony.getCitizens().values().stream() - .filter(citizen -> citizen.getHomeBuilding() == null).sorted(Comparator.comparing(CitizenDataView::getName)) - .collect(Collectors.toList()); + .filter(cit -> cit.getHomeBuilding() == null || !(colony.getBuilding(cit.getHomeBuilding()) instanceof BuildingBarracksTower.View) && !cit.getHomeBuilding().equals(building.getID())) + .sorted(Comparator.comparing(CitizenDataView::getName)).collect(Collectors.toList()); } /** @@ -144,7 +118,31 @@ public void updateElement(final int index, @NotNull final Pane rowPane) if (building instanceof BuildingHome.View) { rowPane.findPaneOfTypeByID(CITIZEN_LABEL, Label.class).setLabelText(citizen.getName()); - rowPane.findPaneOfTypeByID(CITIZEN_JOB, Label.class).setLabelText(LanguageHandler.format(citizen.getJob())); + + final BlockPos work = citizen.getWorkBuilding(); + String workString = ""; + if (work != null) + { + workString = " " + BlockPosUtil.getDistance2D(work, building.getLocation()) + " blocks"; + } + + final BlockPos home = citizen.getHomeBuilding(); + String homeString = ""; + if (home != null) + { + if (work != null) + { + homeString = LanguageHandler.format("com.minecolonies.coremod.gui.homeHut.currently", BlockPosUtil.getDistance2D(work, home)); + + } + else + { + homeString = LanguageHandler.format("com.minecolonies.coremod.gui.homeHut.current", home.getX(), home.getY(), home.getZ()); + } + } + + rowPane.findPaneOfTypeByID(CITIZEN_JOB, Label.class).setLabelText(LanguageHandler.format(citizen.getJob()) + workString); + rowPane.findPaneOfTypeByID(CITIZEN_LIVING, Label.class).setLabelText(homeString); final Button done = rowPane.findPaneOfTypeByID(CITIZEN_DONE, Button.class); if (colony.isManualHousing()) diff --git a/src/main/java/com/minecolonies/coremod/network/messages/AssignUnassignMessage.java b/src/main/java/com/minecolonies/coremod/network/messages/AssignUnassignMessage.java index 738b55e6a68..1730e6526df 100644 --- a/src/main/java/com/minecolonies/coremod/network/messages/AssignUnassignMessage.java +++ b/src/main/java/com/minecolonies/coremod/network/messages/AssignUnassignMessage.java @@ -119,11 +119,15 @@ public void messageOnServerThread(final AssignUnassignMessage message, final Ent } final CitizenData citizen = colony.getCitizenManager().getCitizen(message.citizenID); - if (message.assign && !((BuildingHome) building).isFull() && citizen.getHomeBuilding() == null) + if (message.assign && !building.isFull() && !building.equals(citizen.getHomeBuilding())) { - ((BuildingHome) building).assignCitizen(citizen); + if (citizen.getHomeBuilding() != null) + { + citizen.getHomeBuilding().removeCitizen(citizen); + } + building.assignCitizen(citizen); } - else if (((BuildingHome) building).hasAssignedCitizen(citizen)) + else if (building.hasAssignedCitizen(citizen)) { building.removeCitizen(citizen); } diff --git a/src/main/resources/assets/minecolonies/gui/windowassigncitizen.xml b/src/main/resources/assets/minecolonies/gui/windowassigncitizen.xml index e4c0dc01ff2..de917243988 100644 --- a/src/main/resources/assets/minecolonies/gui/windowassigncitizen.xml +++ b/src/main/resources/assets/minecolonies/gui/windowassigncitizen.xml @@ -2,12 +2,13 @@ lightbox="true" xsi:noNamespaceSchemaLocation="file:../../../../java/com/minecolonies/blockout/blockOut.xsd"> -