Fix score attribution and preserve custom scores

This commit is contained in:
2026-09-26 18:46:22 -07:00
parent 11c5c94839
commit 648e706c86
5 changed files with 45 additions and 21 deletions

View File

@@ -18,7 +18,6 @@ along with MobScores. If not, see <http://www.gnu.org/licenses/>.
package com.majinnaibu.minecraft.plugins.mobscores;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.UUID;
import java.util.logging.Level;
@@ -29,7 +28,6 @@ import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.entity.Zombie;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
@@ -58,12 +56,9 @@ public class MobScoresPlugin extends JavaPlugin {
// Create the default config if it doesn't exist.
saveDefaultConfig();
getConfig().set("ScoreTable", serializeScoreTable(getDefaultScoreTable()));
saveConfig();
// Load our score table from config or set defaults.
if (getConfig().isConfigurationSection("ScoreTable")) {
deserializeScoreTable(getConfig().getConfigurationSection("ScoreTable").getValues(false));
_scoreTable = deserializeScoreTable(getConfig().getConfigurationSection("ScoreTable").getValues(false));
} else {
_scoreTable = getDefaultScoreTable();
getConfig().set("ScoreTable", serializeScoreTable(_scoreTable));
@@ -113,7 +108,7 @@ public class MobScoresPlugin extends JavaPlugin {
}
public void claimMob(Entity entity, Player damager) {
if(entity instanceof Zombie){
if (_scoreTable.containsKey(entity.getType())) {
_claimedMobs.put(entity.getUniqueId(), damager.getUniqueId());
}
}
@@ -137,14 +132,12 @@ public class MobScoresPlugin extends JavaPlugin {
}
public void sendPlayerScoreTable(Player player) {
Iterator<Map.Entry<EntityType, Integer>> i = _scoreTable.entrySet().iterator();
Map.Entry<EntityType, Integer> pair = null;
for(pair = i.next(); i.hasNext(); pair = i.next()){
if(pair.getValue() != 0){
EntityType type = pair.getKey();
for (Map.Entry<EntityType, Integer> entry : _scoreTable.entrySet()) {
if (entry.getValue() != 0) {
EntityType type = entry.getKey();
Component message = Component.translatable(type.translationKey())
.append(Component.text(" = "))
.append(Component.text(String.valueOf(pair.getValue()))
.append(Component.text(String.valueOf(entry.getValue()))
.color(NamedTextColor.GREEN));
sendPlayerMessage(player, message);
}

View File

@@ -19,6 +19,7 @@ package com.majinnaibu.minecraft.plugins.mobscores.listeners;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDeathEvent;
@@ -37,12 +38,19 @@ public class MobDeathListener implements Listener {
@EventHandler
public void onEntityDamage(EntityDamageEvent event) {
if(event instanceof EntityDamageByEntityEvent){
EntityDamageByEntityEvent ev = (EntityDamageByEntityEvent) event;
Entity damager = ev.getDamager();
if(damager instanceof Player){
_plugin.claimMob(ev.getEntity(), (Player)damager);
}
if (!(event instanceof EntityDamageByEntityEvent damageEvent)) {
return;
}
Entity damager = damageEvent.getDamager();
Player creditedPlayer = null;
if (damager instanceof Player directPlayer) {
creditedPlayer = directPlayer;
} else if (damager instanceof Projectile projectile
&& projectile.getShooter() instanceof Player projectileShooter) {
creditedPlayer = projectileShooter;
}
if (creditedPlayer != null) {
_plugin.claimMob(event.getEntity(), creditedPlayer);
}
}