use way simpler logic here
This commit is contained in:
parent
78c18135df
commit
829ee11d52
@ -6,6 +6,7 @@ import me.xginko.villageroptimizer.config.Config;
|
|||||||
import me.xginko.villageroptimizer.enums.OptimizationType;
|
import me.xginko.villageroptimizer.enums.OptimizationType;
|
||||||
import me.xginko.villageroptimizer.models.WrappedVillager;
|
import me.xginko.villageroptimizer.models.WrappedVillager;
|
||||||
import me.xginko.villageroptimizer.utils.CommonUtils;
|
import me.xginko.villageroptimizer.utils.CommonUtils;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.TextReplacementConfig;
|
import net.kyori.adventure.text.TextReplacementConfig;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
@ -20,9 +21,6 @@ import org.bukkit.event.Listener;
|
|||||||
import org.bukkit.event.block.BlockBreakEvent;
|
import org.bukkit.event.block.BlockBreakEvent;
|
||||||
import org.bukkit.event.block.BlockPlaceEvent;
|
import org.bukkit.event.block.BlockPlaceEvent;
|
||||||
|
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class WorkstationOptimization implements VillagerOptimizerModule, Listener {
|
public class WorkstationOptimization implements VillagerOptimizerModule, Listener {
|
||||||
|
|
||||||
private final VillagerManager villagerManager;
|
private final VillagerManager villagerManager;
|
||||||
@ -67,36 +65,39 @@ public class WorkstationOptimization implements VillagerOptimizerModule, Listene
|
|||||||
if (!config.workstations_that_disable.contains(placed.getType())) return;
|
if (!config.workstations_that_disable.contains(placed.getType())) return;
|
||||||
|
|
||||||
final Location workstationLoc = placed.getLocation();
|
final Location workstationLoc = placed.getLocation();
|
||||||
|
WrappedVillager closest = null;
|
||||||
|
double closestDistance = Double.MAX_VALUE;
|
||||||
|
|
||||||
List<Entity> nearbyUnoptimized = workstationLoc.getNearbyEntities(search_radius, search_radius, search_radius).stream().sorted(Comparator.comparingInt(entity -> {
|
for (Entity entity : workstationLoc.getNearbyEntities(search_radius, search_radius, search_radius)) {
|
||||||
if (entity.getType().equals(EntityType.VILLAGER)) {
|
if (entity.getType().equals(EntityType.VILLAGER)) {
|
||||||
Villager villager = (Villager) entity;
|
Villager villager = (Villager) entity;
|
||||||
Villager.Profession profession = villager.getProfession();
|
Villager.Profession profession = villager.getProfession();
|
||||||
if (!profession.equals(Villager.Profession.NONE) && !profession.equals(Villager.Profession.NITWIT) && !villagerManager.getOrAdd(villager).isOptimized()) {
|
if (!profession.equals(Villager.Profession.NONE) && !profession.equals(Villager.Profession.NITWIT)) {
|
||||||
return (int) entity.getLocation().distance(workstationLoc);
|
WrappedVillager wVillager = villagerManager.getOrAdd(villager);
|
||||||
|
if (!wVillager.isOptimized() && entity.getLocation().distance(workstationLoc) < closestDistance) {
|
||||||
|
closest = wVillager;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Integer.MAX_VALUE;
|
}
|
||||||
})).toList();
|
|
||||||
|
|
||||||
if (nearbyUnoptimized.isEmpty()) return;
|
if (closest == null) return;
|
||||||
WrappedVillager closest = villagerManager.getOrAdd((Villager) nearbyUnoptimized.get(0));
|
|
||||||
|
|
||||||
if (closest.setOptimization(OptimizationType.WORKSTATION)) {
|
if (closest.setOptimization(OptimizationType.WORKSTATION)) {
|
||||||
if (shouldNotifyPlayer) {
|
if (shouldNotifyPlayer) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
VillagerOptimizer.getLang(player.locale()).workstation_optimize_success.forEach(line -> player.sendMessage(line
|
for (Component line : VillagerOptimizer.getLang(player.locale()).workstation_unoptimize_success) player.sendMessage(line
|
||||||
.replaceText(TextReplacementConfig.builder().matchLiteral("%villagertype%").replacement(closest.villager().getProfession().toString().toLowerCase()).build())
|
.replaceText(TextReplacementConfig.builder().matchLiteral("%villagertype%").replacement(closest.villager().getProfession().toString().toLowerCase()).build())
|
||||||
.replaceText(TextReplacementConfig.builder().matchLiteral("%workstation%").replacement(placed.getType().toString().toLowerCase()).build())
|
.replaceText(TextReplacementConfig.builder().matchLiteral("%workstation%").replacement(placed.getType().toString().toLowerCase()).build())
|
||||||
));
|
);
|
||||||
}
|
}
|
||||||
if (shouldLog)
|
if (shouldLog)
|
||||||
VillagerOptimizer.getLog().info(event.getPlayer().getName() + " optimized a villager using workstation: '" + placed.getType().toString().toLowerCase() + "'");
|
VillagerOptimizer.getLog().info(event.getPlayer().getName() + " optimized a villager using workstation: '" + placed.getType().toString().toLowerCase() + "'");
|
||||||
} else {
|
} else {
|
||||||
if (shouldNotifyPlayer) {
|
if (shouldNotifyPlayer) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
VillagerOptimizer.getLang(player.locale()).nametag_on_optimize_cooldown.forEach(line -> player.sendMessage(line
|
for (Component line : VillagerOptimizer.getLang(player.locale()).nametag_on_optimize_cooldown) player.sendMessage(line
|
||||||
.replaceText(TextReplacementConfig.builder().matchLiteral("%time%").replacement(CommonUtils.formatTime(closest.getOptimizeCooldown())).build())));
|
.replaceText(TextReplacementConfig.builder().matchLiteral("%time%").replacement(CommonUtils.formatTime(closest.getOptimizeCooldown())).build()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -107,28 +108,29 @@ public class WorkstationOptimization implements VillagerOptimizerModule, Listene
|
|||||||
if (!config.workstations_that_disable.contains(placed.getType())) return;
|
if (!config.workstations_that_disable.contains(placed.getType())) return;
|
||||||
|
|
||||||
final Location workstationLoc = placed.getLocation();
|
final Location workstationLoc = placed.getLocation();
|
||||||
|
WrappedVillager closest = null;
|
||||||
|
double closestDistance = Double.MAX_VALUE;
|
||||||
|
|
||||||
List<Entity> nearbyOptimized = workstationLoc.getNearbyEntities(search_radius, search_radius, search_radius).stream().sorted(Comparator.comparingInt(entity -> {
|
for (Entity entity : workstationLoc.getNearbyEntities(search_radius, search_radius, search_radius)) {
|
||||||
if (entity.getType().equals(EntityType.VILLAGER)) {
|
if (entity.getType().equals(EntityType.VILLAGER)) {
|
||||||
Villager villager = (Villager) entity;
|
Villager villager = (Villager) entity;
|
||||||
Villager.Profession profession = villager.getProfession();
|
Villager.Profession profession = villager.getProfession();
|
||||||
if (!profession.equals(Villager.Profession.NONE) && !profession.equals(Villager.Profession.NITWIT) && villagerManager.getOrAdd(villager).isOptimized()) {
|
if (!profession.equals(Villager.Profession.NONE) && !profession.equals(Villager.Profession.NITWIT)) {
|
||||||
return (int) entity.getLocation().distance(workstationLoc);
|
WrappedVillager wVillager = villagerManager.getOrAdd(villager);
|
||||||
|
if (wVillager.isOptimized() && entity.getLocation().distance(workstationLoc) < closestDistance) {
|
||||||
|
closest = wVillager;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Integer.MAX_VALUE;
|
}
|
||||||
})).toList();
|
|
||||||
|
|
||||||
if (nearbyOptimized.isEmpty()) return;
|
if (closest != null && closest.getOptimizationType().equals(OptimizationType.WORKSTATION)) {
|
||||||
WrappedVillager closest = villagerManager.getOrAdd((Villager) nearbyOptimized.get(0));
|
|
||||||
|
|
||||||
if (closest.getOptimizationType().equals(OptimizationType.WORKSTATION)) {
|
|
||||||
if (shouldNotifyPlayer) {
|
if (shouldNotifyPlayer) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
VillagerOptimizer.getLang(player.locale()).workstation_unoptimize_success.forEach(line -> player.sendMessage(line
|
for (Component line : VillagerOptimizer.getLang(player.locale()).workstation_unoptimize_success) player.sendMessage(line
|
||||||
.replaceText(TextReplacementConfig.builder().matchLiteral("%villagertype%").replacement(closest.villager().getProfession().toString().toLowerCase()).build())
|
.replaceText(TextReplacementConfig.builder().matchLiteral("%villagertype%").replacement(closest.villager().getProfession().toString().toLowerCase()).build())
|
||||||
.replaceText(TextReplacementConfig.builder().matchLiteral("%workstation%").replacement(placed.getType().toString().toLowerCase()).build())
|
.replaceText(TextReplacementConfig.builder().matchLiteral("%workstation%").replacement(placed.getType().toString().toLowerCase()).build())
|
||||||
));
|
);
|
||||||
}
|
}
|
||||||
if (shouldLog)
|
if (shouldLog)
|
||||||
VillagerOptimizer.getLog().info(event.getPlayer().getName() + " unoptimized a villager by breaking workstation: '" + placed.getType().toString().toLowerCase() + "'");
|
VillagerOptimizer.getLog().info(event.getPlayer().getName() + " unoptimized a villager by breaking workstation: '" + placed.getType().toString().toLowerCase() + "'");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user