Skip to content

Commit c8326c7

Browse files
authored
Merge pull request #20 from granny/feat/add-info-to-zombie-villagers
add info to zombie villagers
2 parents 0f44053 + e99c689 commit c8326c7

1 file changed

Lines changed: 73 additions & 41 deletions

File tree

src/main/java/adhdmc/villagerinfo/VillagerHandling/VillagerHandler.java

Lines changed: 73 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@
1010
import net.kyori.adventure.text.minimessage.MiniMessage;
1111
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
1212
import org.bukkit.Location;
13+
import org.bukkit.entity.Ageable;
1314
import org.bukkit.entity.Player;
1415
import org.bukkit.entity.Villager;
16+
import org.bukkit.entity.ZombieVillager;
1517
import org.bukkit.entity.memory.MemoryKey;
1618
import org.bukkit.event.EventHandler;
1719
import org.bukkit.event.EventPriority;
@@ -24,7 +26,6 @@
2426

2527
import java.util.ArrayList;
2628
import java.util.Arrays;
27-
import java.util.UUID;
2829

2930
public class VillagerHandler implements Listener {
3031

@@ -44,18 +45,30 @@ public void onVillagerClick(PlayerInteractEntityEvent event) {
4445
if (!event.getPlayer().isSneaking()) {
4546
return;
4647
}
47-
if (!(event.getRightClicked() instanceof Villager villager)) {
48-
return;
48+
if (event.getRightClicked() instanceof Villager villager) {
49+
if (!player.hasPermission(Perms.USE.getPerm())) {
50+
return;
51+
}
52+
if (Arrays.stream(ToggleSetting.values()).noneMatch(ToggleSetting::isEnabled)) {
53+
VillagerInfo.getInstance().getLogger().warning("You have all VillagerInfo options turned off. That seems silly, why do you have the plugin installed if you don't want to use it?");
54+
return;
55+
}
56+
event.setCancelled(true);
57+
processVillager(player, villager);
58+
} else if (event.getRightClicked() instanceof ZombieVillager zombieVillager) {
59+
if (!player.hasPermission(Perms.USE.getPerm())) {
60+
return;
61+
}
62+
if (Arrays.stream(ToggleSetting.values()).noneMatch(ToggleSetting::isEnabled)) {
63+
VillagerInfo.getInstance().getLogger().warning("You have all VillagerInfo options turned off. That seems silly, why do you have the plugin installed if you don't want to use it?");
64+
return;
65+
}
66+
event.setCancelled(true);
67+
processZombieVillager(player, zombieVillager);
4968
}
69+
}
5070

51-
if (!player.hasPermission(Perms.USE.getPerm())) {
52-
return;
53-
}
54-
if (Arrays.stream(ToggleSetting.values()).noneMatch(ToggleSetting::isEnabled)) {
55-
VillagerInfo.getInstance().getLogger().warning("You have all VillagerInfo options turned off. That seems silly, why do you have the plugin installed if you don't want to use it?");
56-
return;
57-
}
58-
event.setCancelled(true);
71+
private void processVillager(Player player, Villager villager) {
5972
Location villagerPOI = villager.getMemory(MemoryKey.JOB_SITE);
6073
ArrayList<Component> messageList = new ArrayList<>();
6174
boolean hasProfession = villager.getProfession() != Villager.Profession.NONE
@@ -65,11 +78,11 @@ public void onVillagerClick(PlayerInteractEntityEvent event) {
6578
boolean isAdult = villager.isAdult();
6679
//time until adult
6780
if (ToggleSetting.BABY_AGE.isEnabled() && !isAdult) {
68-
messageList.add(villagerTimeTillAdult(villager));
81+
messageList.add(timeTillAdult(villager));
6982
}
7083
//profession
7184
if (ToggleSetting.PROFESSION.isEnabled() && isAdult) {
72-
messageList.add(villagerProfession(villager));
85+
messageList.add(villagerProfession(villager.getProfession()));
7386
}
7487
//job-site
7588
// Only show job site and last worked info if the villager has a profession
@@ -100,7 +113,7 @@ public void onVillagerClick(PlayerInteractEntityEvent event) {
100113
}
101114
//reputation
102115
if (ToggleSetting.REPUTATION.isEnabled()) {
103-
messageList.add(villagerPlayerReputation(villager, player));
116+
messageList.add(villagerPlayerReputation(villager.getReputation(player.getUniqueId())));
104117
}
105118
if (ToggleSetting.HIGHLIGHT_WORKSTATION.isEnabled() && villagerPOI != null) {
106119
HighlightHandling.villagerJobsiteHighlight(villager.getPersistentDataContainer(), villager.getUniqueId(), villagerPOI);
@@ -113,33 +126,55 @@ public void onVillagerClick(PlayerInteractEntityEvent event) {
113126
}
114127
}
115128

129+
private void processZombieVillager(Player player, ZombieVillager zombieVillager) {
130+
ArrayList<Component> messageList = new ArrayList<>();
131+
boolean isAdult = zombieVillager.isAdult();
132+
//time until adult
133+
if (ToggleSetting.BABY_AGE.isEnabled() && !isAdult) {
134+
messageList.add(timeTillAdult(zombieVillager));
135+
}
136+
//profession
137+
if (ToggleSetting.PROFESSION.isEnabled() && isAdult) {
138+
messageList.add(villagerProfession(zombieVillager.getVillagerProfession()));
139+
}
140+
//reputation
141+
// TODO: wait for Reputation API to be added for Zombie Villagers or use PDC to calculate reputation NBT by hand
142+
//if (ToggleSetting.REPUTATION.isEnabled()) {
143+
// messageList.add(villagerPlayerReputation(zombieVillager.getReputation(player.getUniqueId())));
144+
//}
145+
//Messages
146+
Component prefix = miniMessage.deserialize(Message.PREFIX.getMessage());
147+
player.sendMessage(prefix);
148+
for (Component component : messageList) {
149+
player.sendMessage(component);
150+
}
151+
}
152+
116153
/**
117154
* Checks and returns formatted 'time till adult' message component
118-
* @param villager Clicked Villager
155+
* @param ageable Clicked Villager
119156
* @return Formatted Time Component
120157
*/
121-
private Component villagerTimeTillAdult(Villager villager) {
158+
private Component timeTillAdult(Ageable ageable) {
122159
Component timeTillAdultFinal;
123-
long villAge = villager.getAge();
124-
villAge = villAge * -1;
125-
VillagerInfo.getInstance().getLogger().info("" + villAge);
126-
String timeCalc = timeMath(villAge);
160+
long age = ageable.getAge();
161+
age = age * -1;
162+
String timeCalc = timeMath(age);
127163
timeTillAdultFinal = miniMessage.deserialize(Message.VILLAGER_AGE.getMessage(), Placeholder.unparsed("age", timeCalc));
128164
return timeTillAdultFinal;
129165
}
130166

131167
/**
132-
* Checks and returns villager profession component
133-
* @param villager Clicked Villager
168+
* Checks and returns profession component
169+
* @param profession profession
134170
* @return Profession Component
135171
*/
136-
private Component villagerProfession(Villager villager) {
172+
private Component villagerProfession(Villager.Profession profession) {
137173
Component professionFinal;
138-
String villagerProfessionString = villager.getProfession().toString();
139-
if (villager.getProfession() == Villager.Profession.NONE) {
174+
if (profession == Villager.Profession.NONE) {
140175
professionFinal = miniMessage.deserialize(Message.VILLAGER_PROFESSION.getMessage(), Placeholder.parsed("profession", Message.NONE.getMessage()));
141176
} else {
142-
professionFinal = miniMessage.deserialize(Message.VILLAGER_PROFESSION.getMessage(), Placeholder.parsed("profession", villagerProfessionString));
177+
professionFinal = miniMessage.deserialize(Message.VILLAGER_PROFESSION.getMessage(), Placeholder.parsed("profession", profession.toString()));
143178
}
144179
return professionFinal;
145180
}
@@ -269,13 +304,12 @@ private Component villagerRestocks(Villager villager) {
269304

270305
/**
271306
* Gets a player's reputation and returns a component
272-
* @param villager Clicked Villager
273-
* @param player Player to evaluate
307+
* @param reputation Reputation to evaluate
274308
* @return Reputation Component
275309
*/
276-
private Component villagerPlayerReputation(Villager villager, Player player) {
310+
private Component villagerPlayerReputation(Reputation reputation) {
277311
Component villagerReputationFinal;
278-
int reputationRawTotal = reputationTotal(villager, player.getUniqueId());
312+
int reputationRawTotal = reputationTotal(reputation);
279313
String playerReputation = ReputationHandler.villagerReputation(reputationRawTotal);
280314
villagerReputationFinal = miniMessage.deserialize(Message.PLAYER_REPUTATION.getMessage(), Placeholder.unparsed("reputation", playerReputation));
281315
return villagerReputationFinal;
@@ -284,20 +318,18 @@ private Component villagerPlayerReputation(Villager villager, Player player) {
284318

285319
/**
286320
* Calculates the total reputation of a player, using all reputation types
287-
* @param villager Clicked Villager
288-
* @param player Player to evaluate
321+
* @param reputation reputation to calculate
289322
* @return Total reputation score
290323
*/
291-
private int reputationTotal(Villager villager, UUID player) {
292-
Reputation playerReputation = villager.getReputation(player);
293-
if (playerReputation == null) return 0;
294-
int playerReputationMP = playerReputation.getReputation(ReputationType.MAJOR_POSITIVE);
295-
int playerReputationP = playerReputation.getReputation(ReputationType.MINOR_POSITIVE);
296-
int playerReputationMN = playerReputation.getReputation(ReputationType.MAJOR_NEGATIVE);
297-
int playerReputationN = playerReputation.getReputation(ReputationType.MINOR_NEGATIVE);
298-
int playerReputationT = playerReputation.getReputation(ReputationType.TRADING);
324+
private int reputationTotal(Reputation reputation) {
325+
if (reputation == null) return 0;
326+
int reputationMP = reputation.getReputation(ReputationType.MAJOR_POSITIVE);
327+
int reputationP = reputation.getReputation(ReputationType.MINOR_POSITIVE);
328+
int reputationMN = reputation.getReputation(ReputationType.MAJOR_NEGATIVE);
329+
int reputationN = reputation.getReputation(ReputationType.MINOR_NEGATIVE);
330+
int reputationT = reputation.getReputation(ReputationType.TRADING);
299331
//5MP+P+T-N-5MN = Total Reputation Score. Maxes at -700, 725
300-
return (playerReputationMP * 5) + playerReputationP + playerReputationT - playerReputationN - (playerReputationMN * 5);
332+
return (reputationMP * 5) + reputationP + reputationT - reputationN - (reputationMN * 5);
301333
}
302334

303335
/**

0 commit comments

Comments
 (0)