mirror of
https://github.com/taoneill/war.git
synced 2024-12-12 11:56:46 +01:00
Allow the use of multiple items in rewards.
This also allows the use of XP and points as rewards.
This commit is contained in:
parent
17aef5e162
commit
26ec11f46c
@ -1,16 +1,23 @@
|
|||||||
package com.tommytony.war.config;
|
package com.tommytony.war.config;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.tommytony.war.Team;
|
import com.tommytony.war.Team;
|
||||||
import com.tommytony.war.War;
|
import com.tommytony.war.War;
|
||||||
import com.tommytony.war.Warzone;
|
import com.tommytony.war.Warzone;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import org.apache.commons.lang.Validate;
|
import org.apache.commons.lang.Validate;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.configuration.MemoryConfiguration;
|
import org.bukkit.configuration.MemoryConfiguration;
|
||||||
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manage rewards for certain killstreaks.
|
* Manage rewards for certain killstreaks.
|
||||||
@ -28,11 +35,19 @@ public class KillstreakReward {
|
|||||||
section = new MemoryConfiguration();
|
section = new MemoryConfiguration();
|
||||||
section.set("3.privmsg", "You have been rewarded with some health for your kills.");
|
section.set("3.privmsg", "You have been rewarded with some health for your kills.");
|
||||||
section.set("3.reward.health", 8);
|
section.set("3.reward.health", 8);
|
||||||
|
section.set("4.reward.xp", 3);
|
||||||
section.set("5.message", "{0} is on a &ckillstreak&f! 5 kills this life.");
|
section.set("5.message", "{0} is on a &ckillstreak&f! 5 kills this life.");
|
||||||
section.set("5.privmsg", "You have received some items for your kills.");
|
section.set("5.privmsg", "You have received some items for your kills.");
|
||||||
section.set("5.reward.item.id", 262);
|
section.set("5.reward.points", 1);
|
||||||
section.set("5.reward.item.damage", (short) 0);
|
section.set("5.reward.items", ImmutableList.of(new ItemStack(Material.ARROW, 15), new ItemStack(Material.EGG)));
|
||||||
section.set("5.reward.item.amount", 15);
|
ItemStack sword = new ItemStack(Material.WOOD_SWORD);
|
||||||
|
sword.addEnchantment(Enchantment.DAMAGE_ALL, 2);
|
||||||
|
sword.addEnchantment(Enchantment.KNOCKBACK, 1);
|
||||||
|
ItemMeta meta = sword.getItemMeta();
|
||||||
|
meta.setDisplayName("The Breaker");
|
||||||
|
meta.setLore(ImmutableList.of("Very slow speed"));
|
||||||
|
sword.setItemMeta(meta);
|
||||||
|
section.set("7.reward.items", ImmutableList.of(sword));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -54,8 +69,17 @@ public class KillstreakReward {
|
|||||||
* @param kills Amount of kills to reward for
|
* @param kills Amount of kills to reward for
|
||||||
*/
|
*/
|
||||||
public void rewardPlayer(Player player, int kills) {
|
public void rewardPlayer(Player player, int kills) {
|
||||||
Warzone zone = Warzone.getZoneByPlayerName(player.getName());
|
if (section == null) {
|
||||||
Team playerTeam = Team.getTeamByPlayerName(player.getName());
|
/*
|
||||||
|
* Cancel the reward if there is no configuration for killstreaks.
|
||||||
|
* This can occur if the server owner has an older War config with
|
||||||
|
* no settings for killstreaks and have neglected to add any. Heck,
|
||||||
|
* they shouldn't have enabled killstreaks in the warzone anyway.
|
||||||
|
*/
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final Warzone zone = Warzone.getZoneByPlayerName(player.getName());
|
||||||
|
final Team playerTeam = Team.getTeamByPlayerName(player.getName());
|
||||||
Validate.notNull(zone, "Cannot reward player if they are not in a warzone");
|
Validate.notNull(zone, "Cannot reward player if they are not in a warzone");
|
||||||
Validate.notNull(playerTeam, "Cannot reward player if they are not in a team");
|
Validate.notNull(playerTeam, "Cannot reward player if they are not in a team");
|
||||||
if (section.contains(Integer.toString(kills))) {
|
if (section.contains(Integer.toString(kills))) {
|
||||||
@ -74,19 +98,37 @@ public class KillstreakReward {
|
|||||||
double health = player.getHealth() + killSection.getInt("reward.health");
|
double health = player.getHealth() + killSection.getInt("reward.health");
|
||||||
player.setHealth(health > 20 ? 20 : health); // Grant up to full health only
|
player.setHealth(health > 20 ? 20 : health); // Grant up to full health only
|
||||||
}
|
}
|
||||||
if (killSection.contains("reward.item")) {
|
if (killSection.contains("reward.items")) {
|
||||||
player.getInventory().addItem(this.assembleItemStack(killSection.getConfigurationSection("reward.item")));
|
for (Object obj : killSection.getList("reward.items")) {
|
||||||
|
if (obj instanceof ItemStack) {
|
||||||
|
player.getInventory().addItem((ItemStack) obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (killSection.contains("reward.xp") && !playerTeam.getTeamConfig().resolveBoolean(TeamConfig.XPKILLMETER)) {
|
||||||
|
// Will not work if XPKILLMETER is enabled
|
||||||
|
player.setLevel(player.getLevel() + killSection.getInt("reward.xp"));
|
||||||
|
}
|
||||||
|
if (killSection.contains("reward.points")) {
|
||||||
|
for (int i = 0; i < killSection.getInt("reward.points"); i++) {
|
||||||
|
playerTeam.addPoint();
|
||||||
|
}
|
||||||
|
// Detect win conditions
|
||||||
|
if (playerTeam.getPoints() >= playerTeam.getTeamConfig().resolveInt(TeamConfig.MAXSCORE)) {
|
||||||
|
player.getServer().getScheduler().runTaskLater(War.war, new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
zone.handleScoreCapReached(playerTeam.getName());
|
||||||
|
}
|
||||||
|
}, 1L);
|
||||||
|
} else {
|
||||||
|
// just added a point
|
||||||
|
playerTeam.resetSign();
|
||||||
|
zone.getLobby().resetTeamGateSign(playerTeam);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private ItemStack assembleItemStack(ConfigurationSection itemSection) {
|
|
||||||
int type = itemSection.getInt("id");
|
|
||||||
int amount = itemSection.getInt("amount");
|
|
||||||
short damage = (short) itemSection.getInt("damage");
|
|
||||||
return new ItemStack(type, amount, damage);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void saveTo(ConfigurationSection section) {
|
public void saveTo(ConfigurationSection section) {
|
||||||
Map<String, Object> values = this.section.getValues(true);
|
Map<String, Object> values = this.section.getValues(true);
|
||||||
for (Map.Entry<String, Object> entry : values.entrySet()) {
|
for (Map.Entry<String, Object> entry : values.entrySet()) {
|
||||||
|
Loading…
Reference in New Issue
Block a user