use of com.minecolonies.api.entity.citizen.Skill in project minecolonies by Minecolonies.
the class CitizenWindowUtils method createSkillContent.
/**
* Fills the citizen gui with it's skill values.
* @param citizen the citizen to use.
* @param window the window to fill.
*/
public static void createSkillContent(final ICitizenDataView citizen, final AbstractWindowSkeleton window) {
final boolean isCreative = Minecraft.getInstance().player.isCreative();
for (final Map.Entry<Skill, Tuple<Integer, Double>> entry : citizen.getCitizenSkillHandler().getSkills().entrySet()) {
final String id = entry.getKey().name().toLowerCase(Locale.US);
window.findPaneOfTypeByID(id, Text.class).setText(new StringTextComponent(Integer.toString(entry.getValue().getA())));
final Pane buttons = window.findPaneByID(id + "_bts");
if (buttons != null) {
buttons.setEnabled(isCreative);
}
}
}
use of com.minecolonies.api.entity.citizen.Skill in project minecolonies by Minecolonies.
the class CitizenExperienceHandler method addExperience.
@Override
public void addExperience(final double xp) {
final IBuilding home = citizen.getCitizenColonyHandler().getHomeBuilding();
final double citizenHutLevel = home == null ? 0 : home.getBuildingLevel();
final ICitizenData data = citizen.getCitizenData();
final IBuilding workBuilding = data.getWorkBuilding();
if (workBuilding == null || !workBuilding.hasModule(WorkerBuildingModule.class)) {
return;
}
final double workBuildingLevel = workBuilding.getBuildingLevel();
final double buildingXPModifier = 1 + (workBuildingLevel + citizenHutLevel) / 10;
double localXp = xp * buildingXPModifier;
final double saturation = citizen.getCitizenData().getSaturation();
final int intelligenceLevel = data.getCitizenSkillHandler().getLevel(Skill.Intelligence);
localXp += localXp * (intelligenceLevel / 100.0);
if (saturation <= 0) {
return;
}
localXp *= (1 + citizen.getCitizenColonyHandler().getColony().getResearchManager().getResearchEffects().getEffectStrength(LEVELING));
localXp = citizen.getCitizenItemHandler().applyMending(localXp);
final WorkerBuildingModule module = workBuilding.getModuleMatching(WorkerBuildingModule.class, m -> m.getAssignedCitizen().contains(data));
final Skill primary = module.getPrimarySkill();
final Skill secondary = module.getSecondarySkill();
data.getCitizenSkillHandler().addXpToSkill(primary, localXp, data);
data.getCitizenSkillHandler().addXpToSkill(primary.getComplimentary(), localXp / (100.0 / PRIMARY_DEPENDENCY_SHARE), data);
data.getCitizenSkillHandler().removeXpFromSkill(primary.getAdverse(), localXp / (100.0 / PRIMARY_DEPENDENCY_SHARE), data);
data.getCitizenSkillHandler().addXpToSkill(secondary, localXp / 2.0, data);
data.getCitizenSkillHandler().addXpToSkill(secondary.getComplimentary(), localXp / (100.0 / SECONDARY_DEPENDENCY_SHARE), data);
data.getCitizenSkillHandler().removeXpFromSkill(secondary.getAdverse(), localXp / (100.0 / SECONDARY_DEPENDENCY_SHARE), data);
}
use of com.minecolonies.api.entity.citizen.Skill in project minecolonies by Minecolonies.
the class CitizenSkillHandler method init.
@Override
public void init(@NotNull final IColony colony, @Nullable final ICitizenData firstParent, @Nullable final ICitizenData secondParent, final Random rand) {
ICitizenData roleModelA;
ICitizenData roleModelB;
if (firstParent == null) {
roleModelA = colony.getCitizenManager().getRandomCitizen();
} else {
roleModelA = firstParent;
}
if (secondParent == null) {
roleModelB = colony.getCitizenManager().getRandomCitizen();
} else {
roleModelB = secondParent;
}
final int levelCap = (int) colony.getOverallHappiness();
init(levelCap);
final int bonusPoints = 25 + rand.nextInt(25);
int totalPoints = 0;
for (final Skill skill : Skill.values()) {
final int firstRoleModelLevel = roleModelA.getCitizenSkillHandler().getSkills().get(skill).getA();
final int secondRoleModelLevel = roleModelB.getCitizenSkillHandler().getSkills().get(skill).getA();
totalPoints += firstRoleModelLevel + secondRoleModelLevel;
}
for (final Skill skill : Skill.values()) {
final double firstRoleModelLevel = roleModelA.getCitizenSkillHandler().getSkills().get(skill).getA();
final double secondRoleModelLevel = roleModelB.getCitizenSkillHandler().getSkills().get(skill).getA();
int newPoints = (int) (((firstRoleModelLevel + secondRoleModelLevel) / totalPoints) * bonusPoints);
skillMap.put(skill, new Tuple<>(skillMap.get(skill).getA() + newPoints, 0.0D));
}
}
use of com.minecolonies.api.entity.citizen.Skill in project minecolonies by ldtteam.
the class MainWindowCitizen method onButtonClicked.
/**
* Called when a button in the citizen has been clicked.
*
* @param button the clicked button.
*/
@Override
public void onButtonClicked(@NotNull final Button button) {
super.onButtonClicked(button);
if (button.getID().contains(PLUS_PREFIX)) {
final String label = button.getID().replace(PLUS_PREFIX, "");
final Skill skill = Skill.valueOf(StringUtils.capitalize(label));
Network.getNetwork().sendToServer(new AdjustSkillCitizenMessage(colony, citizen, 1, skill));
} else if (button.getID().contains(MINUS_PREFIX)) {
final String label = button.getID().replace(MINUS_PREFIX, "");
final Skill skill = Skill.valueOf(StringUtils.capitalize(label));
Network.getNetwork().sendToServer(new AdjustSkillCitizenMessage(colony, citizen, -1, skill));
}
}
use of com.minecolonies.api.entity.citizen.Skill in project minecolonies by ldtteam.
the class CitizenWindowUtils method updateJobPage.
/**
* Update the job page of the citizen.
*
* @param citizen the citizen.
* @param windowCitizen the window.
* @param colony the colony.
*/
public static void updateJobPage(final ICitizenDataView citizen, final JobWindowCitizen windowCitizen, final IColonyView colony) {
final IBuildingView building = colony.getBuilding(citizen.getWorkBuilding());
if (building instanceof AbstractBuildingView && building.getBuildingType() != ModBuildings.library && citizen.getJobView() != null) {
final WorkerBuildingModuleView moduleView = building.getModuleViewMatching(WorkerBuildingModuleView.class, m -> m.getJobEntry() == citizen.getJobView().getEntry());
if (moduleView == null) {
return;
}
windowCitizen.findPaneOfTypeByID(JOB_TITLE_LABEL, Text.class).setText(LanguageHandler.format("com.minecolonies.coremod.gui.citizen.job.label", LanguageHandler.format(citizen.getJob())));
windowCitizen.findPaneOfTypeByID(JOB_DESC_LABEL, Text.class).setText(LanguageHandler.format("com.minecolonies.coremod.gui.citizen.job.desc"));
final Skill primary = moduleView.getPrimarySkill();
windowCitizen.findPaneOfTypeByID(PRIMARY_SKILL_LABEL, Text.class).setText(LanguageHandler.format("com.minecolonies.coremod.gui.citizen.job.skills." + primary.name().toLowerCase(Locale.US)) + " (100% XP)");
windowCitizen.findPaneOfTypeByID(PRIMARY_SKILL_LABEL + IMAGE_APPENDIX, Image.class).setImage(BASE_IMG_SRC + primary.name().toLowerCase(Locale.US) + ".png");
if (primary.getComplimentary() != null && primary.getAdverse() != null) {
windowCitizen.findPaneOfTypeByID(PRIMARY_SKILL_COM, Text.class).setText(LanguageHandler.format("com.minecolonies.coremod.gui.citizen.job.skills." + primary.getComplimentary().name().toLowerCase(Locale.US)) + " (" + PRIMARY_DEPENDENCY_SHARE + "% XP)");
windowCitizen.findPaneOfTypeByID(PRIMARY_SKILL_COM + IMAGE_APPENDIX, Image.class).setImage(BASE_IMG_SRC + primary.getComplimentary().name().toLowerCase(Locale.US) + ".png");
windowCitizen.findPaneOfTypeByID(PRIMARY_SKILL_ADV, Text.class).setText(LanguageHandler.format("com.minecolonies.coremod.gui.citizen.job.skills." + primary.getAdverse().name().toLowerCase(Locale.US)) + " (-" + PRIMARY_DEPENDENCY_SHARE + "% XP)");
windowCitizen.findPaneOfTypeByID(PRIMARY_SKILL_ADV + IMAGE_APPENDIX, Image.class).setImage(BASE_IMG_SRC + primary.getAdverse().name().toLowerCase(Locale.US) + ".png");
}
final Skill secondary = moduleView.getSecondarySkill();
windowCitizen.findPaneOfTypeByID(SECONDARY_SKILL_LABEL, Text.class).setText(LanguageHandler.format("com.minecolonies.coremod.gui.citizen.job.skills." + secondary.name().toLowerCase(Locale.US)) + " (50% XP)");
windowCitizen.findPaneOfTypeByID(SECONDARY_SKILL_LABEL + IMAGE_APPENDIX, Image.class).setImage(BASE_IMG_SRC + secondary.name().toLowerCase(Locale.US) + ".png");
if (secondary.getComplimentary() != null && secondary.getAdverse() != null) {
windowCitizen.findPaneOfTypeByID(SECONDARY_SKILL_COM, Text.class).setText(LanguageHandler.format("com.minecolonies.coremod.gui.citizen.job.skills." + secondary.getComplimentary().name().toLowerCase(Locale.US)) + " (" + SECONDARY_DEPENDENCY_SHARE + "% XP)");
windowCitizen.findPaneOfTypeByID(SECONDARY_SKILL_COM + IMAGE_APPENDIX, Image.class).setImage(BASE_IMG_SRC + secondary.getComplimentary().name().toLowerCase(Locale.US) + ".png");
windowCitizen.findPaneOfTypeByID(SECONDARY_SKILL_ADV, Text.class).setText(LanguageHandler.format("com.minecolonies.coremod.gui.citizen.job.skills." + secondary.getAdverse().name().toLowerCase(Locale.US)) + " (-" + SECONDARY_DEPENDENCY_SHARE + "% XP)");
windowCitizen.findPaneOfTypeByID(SECONDARY_SKILL_ADV + IMAGE_APPENDIX, Image.class).setImage(BASE_IMG_SRC + secondary.getAdverse().name().toLowerCase(Locale.US) + ".png");
}
} else {
windowCitizen.findPaneOfTypeByID(PRIMARY_SKILL_LABEL + IMAGE_APPENDIX, Image.class).hide();
windowCitizen.findPaneOfTypeByID(PRIMARY_SKILL_COM + IMAGE_APPENDIX, Image.class).hide();
windowCitizen.findPaneOfTypeByID(PRIMARY_SKILL_ADV + IMAGE_APPENDIX, Image.class).hide();
windowCitizen.findPaneOfTypeByID(SECONDARY_SKILL_LABEL + IMAGE_APPENDIX, Image.class).hide();
windowCitizen.findPaneOfTypeByID(SECONDARY_SKILL_COM + IMAGE_APPENDIX, Image.class).hide();
windowCitizen.findPaneOfTypeByID(SECONDARY_SKILL_ADV + IMAGE_APPENDIX, Image.class).hide();
}
}
Aggregations