Skip to content

Commit

Permalink
allow players to toggle seeing villager death messages
Browse files Browse the repository at this point in the history
  • Loading branch information
SeriousGuy888 committed May 14, 2022
1 parent 695c521 commit 72ac8ce
Show file tree
Hide file tree
Showing 6 changed files with 174 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,55 @@

import github.scarsz.discordsrv.DiscordSRV;
import github.scarsz.discordsrv.dependencies.jda.api.entities.TextChannel;
import io.github.seriousguy888.billzovillagers.commands.ToggleVillagerDeathMessagesCommand;
import io.github.seriousguy888.billzovillagers.listeners.*;
import io.github.seriousguy888.billzovillagers.utils.UpdateChecker;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Objects;

public class BillzoVillagers extends JavaPlugin {
private static BillzoVillagers plugin;
FileConfiguration config = getConfig();

public File dataFile;
public FileConfiguration dataConfig;
public DataManager dataManager;
public HashMap<Player, Boolean> villagerDeathMessagesEnabled;

@Override
@SuppressWarnings("ResultOfMethodCallIgnored")
public void onEnable() {
plugin = this;

config.options().copyDefaults();
saveDefaultConfig();

new TaskNameVillagers().runTaskTimer(plugin, 0L, 200L);
registerListeners();
new UpdateChecker().checkForUpdates();
registerListeners();
registerCommands();

dataFile = new File(getDataFolder() + File.separator + "data.yml");
if(!dataFile.exists()) {
try {
dataFile.getParentFile().mkdirs();
dataFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
dataConfig = YamlConfiguration.loadConfiguration(dataFile);
dataManager = new DataManager();
villagerDeathMessagesEnabled = new HashMap<>();
dataManager.loadPlayerData(); // load data of all online players
}

private void registerListeners() {
Expand All @@ -31,10 +60,16 @@ private void registerListeners() {
pluginManager.registerEvents(new EntityDeathListener(), this);
pluginManager.registerEvents(new EntityDamageListener(), this);
pluginManager.registerEvents(new FoodLevelChangeListener(), this);
pluginManager.registerEvents(new JoinLeaveListener(), this);
pluginManager.registerEvents(new PlayerInteractEntityListener(), this);
pluginManager.registerEvents(new PlayerJoinListener(), this);
}

private void registerCommands() {
Objects.requireNonNull(this.getCommand("toggle_villager_death_messages"))
.setExecutor(new ToggleVillagerDeathMessagesCommand());
}

public TextChannel getDiscordChannel() {
String channelName = config.getString("discordsrv.channel_name");

Expand All @@ -47,7 +82,8 @@ public TextChannel getDiscordChannel() {

@Override
public void onDisable() {
System.out.println("f");
dataManager.savePlayerData();
getLogger().info("Unloading BillzoVillagers");
}

public static BillzoVillagers getPlugin() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package io.github.seriousguy888.billzovillagers;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;

import java.io.IOException;

public class DataManager {
private final BillzoVillagers plugin;
public DataManager() {
plugin = BillzoVillagers.getPlugin();
}

/**
* Load in the preferences and data of all currently online players from data.yml.
*/
public void loadPlayerData() {
Bukkit.getOnlinePlayers().forEach(this::loadPlayerData);
}

/**
* Load the preferences and data of a player from data.yml.
* @param player The player to load the data for.
*/
public void loadPlayerData(Player player) {
String uuid = player.getUniqueId().toString();
boolean deathMessagesEnabled = true;

if(plugin.dataConfig.contains(uuid + ".death_messages_enabled"))
deathMessagesEnabled = plugin.dataConfig.getBoolean(uuid + ".death_messages_enabled");
plugin.villagerDeathMessagesEnabled.put(player, deathMessagesEnabled);
}


/**
* Save the preferences and data of all currently online players to data.yml.
*/
public void savePlayerData() {
Bukkit.getOnlinePlayers().forEach(this::savePlayerData);
}

/**
* Save the preferences and data of a player and write it to data.yml.
* @param player The player to save the data for.
*/
public void savePlayerData(Player player) {
String uuid = player.getUniqueId().toString();
Boolean enabled = BillzoVillagers.getPlugin().villagerDeathMessagesEnabled.get(player);

plugin.dataConfig.set(uuid + ".enabled", enabled);
try {
plugin.dataConfig.save(BillzoVillagers.getPlugin().dataFile);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package io.github.seriousguy888.billzovillagers.commands;

import io.github.seriousguy888.billzovillagers.BillzoVillagers;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;

public class ToggleVillagerDeathMessagesCommand implements CommandExecutor {
BillzoVillagers plugin;
public ToggleVillagerDeathMessagesCommand() {
plugin = BillzoVillagers.getPlugin();
}

@Override
public boolean onCommand(@NotNull CommandSender sender,
@NotNull Command command,
@NotNull String commandLabel,
String[] args) {
if(!(sender instanceof Player player)) {
sender.sendMessage("The console cannot use this command!");
return true;
}

Boolean enabled = plugin.villagerDeathMessagesEnabled.get(player);

player.sendMessage(ChatColor.YELLOW
+ "You will "
+ (enabled ? "no longer" : "now")
+ " see villager death messages in chat.");
plugin.villagerDeathMessagesEnabled.put(player, !enabled);

return true;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package io.github.seriousguy888.billzovillagers.listeners;

import github.scarsz.discordsrv.DiscordSRV;
import github.scarsz.discordsrv.dependencies.jda.api.EmbedBuilder;
import github.scarsz.discordsrv.dependencies.jda.api.entities.MessageEmbed;
import github.scarsz.discordsrv.dependencies.jda.api.entities.TextChannel;
Expand All @@ -19,11 +18,8 @@
import org.bukkit.event.entity.EntityDamageEvent;

import java.awt.*;
import java.util.Locale;

public class EntityDamageListener implements Listener {
FileConfiguration config = BillzoVillagers.getPlugin().getConfig();

@EventHandler
public void onEntityDamage(EntityDamageEvent event) {
Entity victim = event.getEntity();
Expand All @@ -50,7 +46,12 @@ public void onEntityDamage(EntityDamageEvent event) {
deathMessage = villName + " died from " + block.getType().name().toLowerCase();
}

Bukkit.broadcastMessage(deathMessage);
final String finalDeathMessage = deathMessage;
Bukkit.getOnlinePlayers().forEach(player -> {
if(BillzoVillagers.getPlugin().villagerDeathMessagesEnabled.get(player)) {
player.sendMessage(finalDeathMessage);
}
});

TextChannel channel = BillzoVillagers.getPlugin().getDiscordChannel();
if(channel != null) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package io.github.seriousguy888.billzovillagers.listeners;


import io.github.seriousguy888.billzovillagers.BillzoVillagers;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;

public class JoinLeaveListener implements Listener {
BillzoVillagers plugin;
public JoinLeaveListener() {
plugin = BillzoVillagers.getPlugin();
}

@EventHandler
public void onJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
plugin.dataManager.loadPlayerData(player);
}

@EventHandler
public void onLeave(PlayerQuitEvent event) {
Player player = event.getPlayer();
plugin.dataManager.savePlayerData(player);
}
}
9 changes: 8 additions & 1 deletion src/main/resources/plugin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,11 @@ website: https://github.com/SeriousGuy888/BillzoVillagers
main: io.github.seriousguy888.billzovillagers.BillzoVillagers
api-version: 1.18
authors: [ SeriousGuy888 ]
softdepend: [ DiscordSRV ]
softdepend: [ DiscordSRV ]
commands:
toggle_villager_death_messages:
description: Toggle seeing villager death messages in chat.
aliases:
- toggle_vdm
- vdm
- villager_death_messages

0 comments on commit 72ac8ce

Please sign in to comment.