Initializing repository

main
Shinare 2 years ago
parent 39d7dbe2bf
commit 4ebd5f443a

@ -0,0 +1,51 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zivilon</groupId>
<artifactId>DamageModifiers</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>DamageModifiers</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.bukkit</groupId>
<artifactId>bukkit</artifactId>
<version>1.7.10-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.github.flinbein</groupId>
<artifactId>PowerNBT</artifactId>
<version>0.8.9.2</version>
</dependency>
</dependencies>
<build>
<defaultGoal>package</defaultGoal>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
</project>

@ -0,0 +1,63 @@
package com.zivilon.damagemodifiers;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import com.zivilon.damagemodifiers.listeners.damage_listener;
import com.zivilon.damagemodifiers.commands.damage_modifier_command;
import com.zivilon.damagemodifiers.types.weapon_damage;
public class DamageModifiers extends JavaPlugin {
private FileConfiguration items_config;
@Override
public void onEnable() {
setup_items_config();
weapon_damage.setPlugin(this);
getServer().getPluginManager().registerEvents(new damage_listener(), this);
getCommand("damagemodifier").setExecutor(new damage_modifier_command(this));
}
private void setup_items_config() {
// Check if items.yml exists, if not, create it from the default
File items_file = new File(getDataFolder(), "items.yml");
if (!items_file.exists()) {
saveResource("items.yml", false);
}
items_config = YamlConfiguration.loadConfiguration(items_file);
}
public FileConfiguration get_items_config() {
if (items_config == null) {
reload_items_config();
}
return items_config;
}
public void reload_items_config() {
File items_file = new File(getDataFolder(), "items.yml");
items_config = YamlConfiguration.loadConfiguration(items_file);
}
public void save_items_config() {
if (items_config == null) {
return;
}
File items_file = new File(getDataFolder(), "items.yml");
try {
get_items_config().save(items_file);
} catch (IOException ex) {
getLogger().log(Level.SEVERE, "Could not save config to " + items_file, ex);
}
}
}

@ -0,0 +1,213 @@
package com.zivilon.damagemodifiers.commands;
import org.bukkit.Bukkit;
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 me.dpohvar.powernbt.api.NBTCompound;
import me.dpohvar.powernbt.api.NBTManager;
import me.dpohvar.powernbt.PowerNBT;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.zivilon.damagemodifiers.DamageModifiers;
public class damage_modifier_command implements CommandExecutor {
private final DamageModifiers plugin;
public damage_modifier_command(DamageModifiers plugin) {
this.plugin = plugin;
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (!sender.hasPermission("admin")) {
sender.sendMessage(ChatColor.RED + "You do not have permission to use this command.");
return true;
}
if (args.length < 1) {
sender.sendMessage("Please specify a subcommand: add, remove, list, read");
return false;
}
if (!args[0].equals("add") && !args[0].equals("remove") && !args[0].equals("list") && !args[0].equals("read")) {
sender.sendMessage("Invalid subcommand: " + args[0]);
sender.sendMessage("Valid subcommands: add, remove, list, read");
return false;
}
if (args.length < 2) {
sender.sendMessage("Please specify a target player");
return false;
}
Player target = Bukkit.getPlayer(args[1]);
if (target == null) {
sender.sendMessage("Target player not found.");
return true;
}
switch (args[0].toLowerCase()) {
case "add":
if (args.length != 5) {
sender.sendMessage("Usage: /damagemodifier add <player> <type> <action> <value>");
return true;
}
add_modifier(target, args[2].toUpperCase(), args[3].toUpperCase(), Float.parseFloat(args[4]));
break;
case "remove":
if (args.length != 3) {
sender.sendMessage("Usage: /damagemodifier remove <player> <type>");
return true;
}
remove_modifier(target, args[2]);
break;
case "list":
if (args.length != 2) {
sender.sendMessage("Usage: /damagemodifier list <player>");
return true;
}
list_modifiers(target, sender);
break;
case "read":
if(!(sender instanceof Player)) {
sender.sendMessage(ChatColor.RED + "This command can only be used by a player.");
return true;
}
Player player = (Player) sender;
readItemAttributes(player);
break;
default:
sender.sendMessage(ChatColor.RED + "Error resolving subcommand.");
return false;
}
return true;
}
private void add_modifier(Player target, String type, String action, float value) {
NBTManager nbtManager = PowerNBT.getApi();
NBTCompound nbtData = nbtManager.read(target);
NBTCompound forgeData = (NBTCompound) nbtData.get("ForgeData");
// If there's no ForgeData compound, create it.
if (forgeData == null) {
forgeData = new NBTCompound();
nbtData.put("ForgeData", forgeData);
}
// Check for DamageModifiers list. If it doesn't exist, create it.
List<NBTCompound> damageModifiers = (List<NBTCompound>) forgeData.get("DamageModifiers");
if (damageModifiers == null) {
damageModifiers = new ArrayList<>();
forgeData.put("DamageModifiers", damageModifiers);
}
nbtManager.write(target, nbtData);
nbtData = nbtManager.read(target);
forgeData = (NBTCompound) nbtData.get("ForgeData");
damageModifiers = (List<NBTCompound>) forgeData.get("DamageModifiers");
boolean found = false;
for (NBTCompound modifier : damageModifiers) {
if (type.equals(modifier.get("type"))) {
modifier.put("action", action);
modifier.put("value", value);
found = true;
break;
}
}
if (!found) {
NBTCompound newModifier = new NBTCompound();
newModifier.put("type", type);
newModifier.put("action", action);
newModifier.put("value", value);
damageModifiers.add(newModifier);
}
// Write the modified NBT data back to the player
nbtManager.write(target, nbtData);
target.sendMessage(ChatColor.GREEN + "Damage modifier added!");
}
private void remove_modifier(Player target, String type) {
NBTManager nbtManager = PowerNBT.getApi();
NBTCompound nbtData = nbtManager.read(target);
NBTCompound forgeData = (NBTCompound) nbtData.get("ForgeData");
if (forgeData == null) {
target.sendMessage(ChatColor.RED + "This player doesn't have any damage modifiers.");
return;
}
List<NBTCompound> damageModifiers = (List<NBTCompound>) forgeData.get("DamageModifiers");
if (damageModifiers == null || damageModifiers.isEmpty()) {
target.sendMessage(ChatColor.RED + "This player doesn't have any damage modifiers.");
return;
}
boolean found = false;
Iterator<NBTCompound> iterator = damageModifiers.iterator();
while (iterator.hasNext()) {
NBTCompound modifier = iterator.next();
if (type.equalsIgnoreCase((String) modifier.get("type"))) {
iterator.remove();
found = true;
break;
}
}
// Write the updated NBT data back to the player
nbtManager.write(target, nbtData);
if (found) {
target.sendMessage(ChatColor.GREEN + "Damage modifier removed!");
} else {
target.sendMessage(ChatColor.RED + "Specified damage modifier type not found.");
}
}
private void list_modifiers(Player target, CommandSender sender) {
NBTManager nbtManager = PowerNBT.getApi();
NBTCompound nbtData = nbtManager.read(target);
NBTCompound forgeData = (NBTCompound) nbtData.get("ForgeData");
if (forgeData == null) {
sender.sendMessage(ChatColor.RED + "This player doesn't have any damage modifiers.");
return;
}
List<NBTCompound> damageModifiers = (List<NBTCompound>) forgeData.get("DamageModifiers");
if (damageModifiers == null || damageModifiers.isEmpty()) {
sender.sendMessage(ChatColor.RED + "This player doesn't have any damage modifiers.");
return;
}
sender.sendMessage(ChatColor.YELLOW + "Damage Modifiers for " + target.getName() + ":");
for (NBTCompound modifier : damageModifiers) {
String type = (String) modifier.get("type");
String action = (String) modifier.get("action");
float value = ((Number) modifier.get("value")).floatValue();
sender.sendMessage(ChatColor.GOLD + "Type: " + type + ", Action: " + action + ", Value: " + value);
}
}
private void readItemAttributes(Player player) {
String itemName = player.getInventory().getItemInHand().getType().toString();
List<String> damageTypes = plugin.get_items_config().getStringList("items." + itemName);
if (damageTypes == null || damageTypes.isEmpty()) {
player.sendMessage(ChatColor.RED + "This item doesn't have any defined damage types.");
return;
}
player.sendMessage(ChatColor.GREEN + "Damage types for " + itemName + ":");
for (String type : damageTypes) {
player.sendMessage("- " + type);
}
}
}

@ -0,0 +1,40 @@
package com.zivilon.damagemodifiers.listeners;
import org.bukkit.entity.Entity;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import me.dpohvar.powernbt.api.NBTCompound;
import me.dpohvar.powernbt.api.NBTManager;
import me.dpohvar.powernbt.PowerNBT;
import com.zivilon.damagemodifiers.types.vanilla_damage;
import com.zivilon.damagemodifiers.types.weapon_damage;
public class damage_listener implements Listener {
@EventHandler
public void onEntityDamage(EntityDamageEvent event) {
Entity damaged = event.getEntity();
NBTManager nbtManager = PowerNBT.getApi();
NBTCompound nbtData = nbtManager.read(damaged);
NBTCompound forgeData = (NBTCompound) nbtData.get("ForgeData");
// Check for the DamageModifiers list
if (forgeData == null || !forgeData.containsKey("DamageModifiers")) {
return; // Exit if there's no DamageModifiers list
}
if (event.getCause() == EntityDamageEvent.DamageCause.ENTITY_ATTACK && event instanceof EntityDamageByEntityEvent) {
weapon_damage.handle((EntityDamageByEntityEvent) event);
} else {
vanilla_damage.handle(event);
}
}
}

@ -0,0 +1,71 @@
package com.zivilon.damagemodifiers.types;
import org.bukkit.event.entity.EntityDamageEvent;
import me.dpohvar.powernbt.api.NBTCompound;
import me.dpohvar.powernbt.api.NBTManager;
import me.dpohvar.powernbt.PowerNBT;
import org.bukkit.entity.LivingEntity;
import java.util.HashMap;
import java.util.Map;
import java.util.List;
public class vanilla_damage {
private static final Map<EntityDamageEvent.DamageCause, String> CAUSE_ALIASES = new HashMap<>();
static {
CAUSE_ALIASES.put(EntityDamageEvent.DamageCause.FIRE_TICK, "FIRE");
CAUSE_ALIASES.put(EntityDamageEvent.DamageCause.LAVA, "FIRE");
}
public static void handle(EntityDamageEvent event) {
EntityDamageEvent.DamageCause cause = event.getCause();
String damageType = CAUSE_ALIASES.getOrDefault(cause, cause.name());
if (cause == EntityDamageEvent.DamageCause.POISON && event.getEntity() instanceof LivingEntity) {
LivingEntity livingEntity = (LivingEntity) event.getEntity();
double damage = event.getDamage();
double healthAfterDamage = livingEntity.getHealth() - damage;
if (healthAfterDamage <= 0) {
event.setDamage(livingEntity.getHealth() - 1);
return; // exit after adjusting the damage
}
}
// Fetch Damage Modifiers
NBTManager nbtManager = PowerNBT.getApi();
NBTCompound nbtData = nbtManager.read(event.getEntity());
NBTCompound forgeData = (NBTCompound) nbtData.get("ForgeData");
List<Object> modifiersList = forgeData.getList("DamageModifiers");
if (modifiersList != null) {
for (Object obj : modifiersList) {
if (obj instanceof NBTCompound) {
NBTCompound modifier = (NBTCompound) obj;
if (damageType.equals(modifier.getString("type"))) {
applyDamageModification(event, modifier);
}
}
}
}
}
private static void applyDamageModification(EntityDamageEvent event, NBTCompound modifier) {
String action = modifier.getString("action");
float value = modifier.getFloat("value");
switch (action) {
case "ADD":
event.setDamage(event.getDamage() + value);
break;
case "MULTIPLY":
event.setDamage(event.getDamage() * value);
break;
case "IMMUNE":
event.setCancelled(true);
break;
}
}
}

@ -0,0 +1,73 @@
package com.zivilon.damagemodifiers.types;
import me.dpohvar.powernbt.api.NBTCompound;
import me.dpohvar.powernbt.api.NBTManager;
import me.dpohvar.powernbt.api.NBTList;
import me.dpohvar.powernbt.PowerNBT;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.inventory.ItemStack;
import com.zivilon.damagemodifiers.DamageModifiers;
import java.util.List;
public class weapon_damage {
private static DamageModifiers plugin;
public static void setPlugin(DamageModifiers instance) {
plugin = instance;
}
public static void handle(EntityDamageByEntityEvent event) {
Entity damager = event.getDamager();
// Check if damager is a LivingEntity
if (damager instanceof LivingEntity) {
LivingEntity livingDamager = (LivingEntity) damager;
ItemStack weapon = livingDamager.getEquipment().getItemInHand();
Material material = weapon.getType(); // Line 33
if (plugin.get_items_config().contains("items." + material.name())) {
List<String> weaponAttributes = plugin.get_items_config().getStringList("items." + material.name());
NBTManager nbtManager = PowerNBT.getApi();
NBTCompound nbtData = nbtManager.read(event.getEntity());
NBTCompound forgeData = (NBTCompound) nbtData.get("ForgeData");
if (forgeData != null && forgeData.containsKey("DamageModifiers")) {
NBTList playerModifiersNbt = forgeData.getList("DamageModifiers");
for (Object obj : playerModifiersNbt) {
if (obj instanceof NBTCompound) {
NBTCompound modifier = (NBTCompound) obj;
String type = modifier.getString("type");
String action = modifier.getString("action");
float value = modifier.getFloat("value");
// Check if weaponAttributes contains the player modifier type
if (weaponAttributes.contains(type)) {
// Apply the modifier action here (ADD, MULTIPLY, or IMMUNE)
switch (action) {
case "ADD":
event.setDamage(event.getDamage() + value);
break;
case "MULTIPLY":
event.setDamage(event.getDamage() * value);
break;
case "IMMUNE":
event.setCancelled(true);
break;
}
}
}
}
}
}
}
}
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,8 @@
main: com.zivilon.damagemodifiers.DamageModifiers
name: DamageModifiers
author: Shinare
version: 1.0
commands:
damagemodifier:
description: Add to or remove damage modifiers from players.
Usage: /modifier <add/remove> <player> [type] [action] [value]
Loading…
Cancel
Save