+ Changed way of spawning mobs with an event.

This commit is contained in:
Zino 2013-08-20 20:39:31 +02:00
parent 35971be829
commit 526e6f28dc
9 changed files with 1127 additions and 722 deletions

27
pom.xml
View File

@ -1,5 +1,4 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <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">
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> <modelVersion>4.0.0</modelVersion>
<groupId>me.blackvein.quests</groupId> <groupId>me.blackvein.quests</groupId>
@ -12,7 +11,6 @@
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<libs.dir>${project.basedir}/lib</libs.dir>
</properties> </properties>
<repositories> <repositories>
@ -53,7 +51,7 @@
<dependency> <dependency>
<groupId>net.aufdemrand</groupId> <groupId>net.aufdemrand</groupId>
<artifactId>denizen</artifactId> <artifactId>denizen</artifactId>
<version>0.9.2-SNAPSHOT</version> <version>0.9.1-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>net.milkbowl.vault</groupId> <groupId>net.milkbowl.vault</groupId>
@ -70,7 +68,7 @@
<artifactId>EpicBoss</artifactId> <artifactId>EpicBoss</artifactId>
<version>1.0</version> <version>1.0</version>
<scope>system</scope> <scope>system</scope>
<systemPath>${libs.dir}/EpicBossRecoded.jar</systemPath> <systemPath>${project.basedir}/lib/EpicBossRecoded.jar</systemPath>
</dependency> </dependency>
</dependencies> </dependencies>
@ -102,28 +100,11 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version> <version>2.3.2</version>
<configuration> <configuration>
<showDeprecation>true</showDeprecation> <showDeprecation>true</showDeprecation>
</configuration> </configuration>
</plugin> </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<addMavenDescriptor>true</addMavenDescriptor>
<manifest>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
</archive>
<outputDirectory>${project.build.directory}</outputDirectory>
<finalName>${project.build.finalName}</finalName>
</configuration>
</plugin>
</plugins> </plugins>
</build> </build>
</project> </project>

View File

@ -1,9 +1,19 @@
package me.blackvein.quests; package me.blackvein.quests;
import java.io.File; import java.io.File;
import java.util.*; import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import me.blackvein.quests.util.ItemUtil; import me.blackvein.quests.util.ItemUtil;
import org.bukkit.*; import me.blackvein.quests.util.QuestMob;
import org.bukkit.ChatColor;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
@ -23,9 +33,23 @@ public class Event {
int stormDuration = 0; int stormDuration = 0;
World thunderWorld = null; World thunderWorld = null;
int thunderDuration = 0; int thunderDuration = 0;
LinkedList<Location> mobSpawnLocs = new LinkedList<Location>(); public LinkedList<QuestMob> mobSpawns = new LinkedList<QuestMob>() {
LinkedList<EntityType> mobSpawnTypes = new LinkedList<EntityType>();
LinkedList<Integer> mobSpawnAmounts = new LinkedList<Integer>(); @Override
public boolean equals(Object o) {
if (o instanceof LinkedList) {
LinkedList<QuestMob> other = (LinkedList<QuestMob>) o;
if (size() != other.size()) return false;
for (int i = 0; i < size(); i++) {
if (get(i).equals(other.get(i)) == false) return false;
}
}
return false;
}
};
LinkedList<Location> lightningStrikes = new LinkedList<Location>(); LinkedList<Location> lightningStrikes = new LinkedList<Location>();
LinkedList<String> commands = new LinkedList<String>(); LinkedList<String> commands = new LinkedList<String>();
LinkedList<PotionEffect> potionEffects = new LinkedList<PotionEffect>(); LinkedList<PotionEffect> potionEffects = new LinkedList<PotionEffect>();
@ -99,17 +123,8 @@ public class Event {
return false; return false;
} }
if (other.mobSpawnLocs.equals(mobSpawnLocs) == false) { if (other.mobSpawns.equals(mobSpawns) == false)
return false; return false;
}
if (other.mobSpawnTypes.equals(mobSpawnTypes) == false) {
return false;
}
if (other.mobSpawnAmounts.equals(mobSpawnAmounts) == false) {
return false;
}
if (other.lightningStrikes.equals(lightningStrikes) == false) { if (other.lightningStrikes.equals(lightningStrikes) == false) {
return false; return false;
@ -206,18 +221,11 @@ public class Event {
thunderWorld.setThunderDuration(thunderDuration); thunderWorld.setThunderDuration(thunderDuration);
} }
if (mobSpawnLocs.isEmpty() == false) { if (mobSpawns.isEmpty() == false) {
for (Location l : mobSpawnLocs) {
for (int i = 1; i <= mobSpawnAmounts.get(mobSpawnLocs.indexOf(l)); i++) {
l.getWorld().spawnEntity(l, mobSpawnTypes.get(mobSpawnLocs.indexOf(l)));
for (QuestMob questMob : mobSpawns) {
questMob.spawn();
} }
}
} }
if (lightningStrikes.isEmpty() == false) { if (lightningStrikes.isEmpty() == false) {
@ -458,70 +466,53 @@ public class Event {
} }
if (data.contains(eventKey + "mob-spawn-locations")) { if (data.contains(eventKey + "mob-spawns")) {
ConfigurationSection section = data.getConfigurationSection(eventKey + "mob-spawns");
if (Quests.checkList(data.getList(eventKey + "mob-spawn-locations"), String.class)) { //is a mob, the keys are just a number or something.
for (String s : section.getKeys(false)) {
String mobName = section.getString(s + ".name");
Location spawnLocation = Quests.getLocation(section.getString(s + ".spawn-location"));
EntityType type = Quests.getMobType(section.getString(s + ".mob-type"));
Integer mobAmount = section.getInt(s + ".spawn-amounts");
if (data.contains(eventKey + "mob-spawn-types")) {
if (Quests.checkList(data.getList(eventKey + "mob-spawn-types"), String.class)) { if (spawnLocation == null) {
if (data.contains(eventKey + "mob-spawn-amounts")) {
if (Quests.checkList(data.getList(eventKey + "mob-spawn-amounts"), Integer.class)) {
List<String> mobLocs = data.getStringList(eventKey + "mob-spawn-locations");
List<String> mobTypes = data.getStringList(eventKey + "mob-spawn-types");
List<Integer> mobAmounts = data.getIntegerList(eventKey + "mob-spawn-amounts");
for (String s : mobLocs) {
Location location = Quests.getLocation(s);
if (location == null) {
Quests.printSevere(ChatColor.GOLD + "[Quests] " + ChatColor.RED + s + ChatColor.GOLD + " inside " + ChatColor.GREEN + " mob-spawn-locations: " + ChatColor.GOLD + "inside Event " + ChatColor.DARK_PURPLE + name + ChatColor.GOLD + " is not in proper location format!"); Quests.printSevere(ChatColor.GOLD + "[Quests] " + ChatColor.RED + s + ChatColor.GOLD + " inside " + ChatColor.GREEN + " mob-spawn-locations: " + ChatColor.GOLD + "inside Event " + ChatColor.DARK_PURPLE + name + ChatColor.GOLD + " is not in proper location format!");
Quests.printSevere(ChatColor.GOLD + "[Quests] Proper location format is: \"WorldName x y z\""); Quests.printSevere(ChatColor.GOLD + "[Quests] Proper location format is: \"WorldName x y z\"");
return null; return null;
} }
EntityType type = Quests.getMobType(mobTypes.get(mobLocs.indexOf(s)));
if (type == null) { if (type == null) {
Quests.printSevere(ChatColor.GOLD + "[Quests] " + ChatColor.RED + mobTypes.get(mobLocs.indexOf(s)) + ChatColor.GOLD + " inside " + ChatColor.GREEN + " mob-spawn-types: " + ChatColor.GOLD + "inside Event " + ChatColor.DARK_PURPLE + name + ChatColor.GOLD + " is not a valid mob name!"); Quests.printSevere(ChatColor.GOLD + "[Quests] " + ChatColor.RED + section.getString(s + ".mob-type") + ChatColor.GOLD + " inside " + ChatColor.GREEN + " mob-spawn-types: " + ChatColor.GOLD + "inside Event " + ChatColor.DARK_PURPLE + name + ChatColor.GOLD + " is not a valid mob name!");
return null; return null;
} }
int amount = mobAmounts.get(mobLocs.indexOf(s)); ItemStack[] inventory = new ItemStack[5];
Float[] dropChances = new Float[5];
event.mobSpawnLocs.add(location); inventory[0] = ItemUtil.readItemStack(section.getString(s + ".held-item"));
event.mobSpawnTypes.add(type); dropChances[0] = (float) section.getDouble(s + ".held-item-drop-chance");
event.mobSpawnAmounts.add(amount);
inventory[1] = ItemUtil.readItemStack(section.getString(s + ".boots"));
dropChances[1] = (float) section.getDouble(s + ".boots-drop-chance");
inventory[2] = ItemUtil.readItemStack(section.getString(s + ".leggings"));
dropChances[2] = (float) section.getDouble(s + ".leggings-drop-chance");
inventory[3] = ItemUtil.readItemStack(section.getString(s + ".chest-plate"));
dropChances[3] = (float) section.getDouble(s + ".chest-plate-drop-chance");
inventory[4] = ItemUtil.readItemStack(section.getString(s + ".helmet"));
dropChances[4] = (float) section.getDouble(s + ".helmet-drop-chance");
QuestMob questMob = new QuestMob(type, spawnLocation, mobAmount);
questMob.inventory = inventory;
questMob.dropChances = dropChances;
questMob.setName(mobName);
event.mobSpawns.add(questMob);
} }
} else {
Quests.printSevere(ChatColor.GOLD + "[Quests] " + ChatColor.RED + "mob-spawn-amounts: " + ChatColor.GOLD + "inside Event " + ChatColor.DARK_PURPLE + name + ChatColor.GOLD + " is not a list of numbers!");
return null;
}
} else {
Quests.printSevere(ChatColor.GOLD + "[Quests] Event " + ChatColor.DARK_PURPLE + name + ChatColor.GOLD + " is missing " + ChatColor.RED + "mob-spawn-amounts:");
return null;
}
} else {
Quests.printSevere(ChatColor.GOLD + "[Quests] " + ChatColor.RED + "mob-spawn-types: " + ChatColor.GOLD + "inside Event " + ChatColor.DARK_PURPLE + name + ChatColor.GOLD + " is not a list of mob names!");
return null;
}
} else {
Quests.printSevere(ChatColor.GOLD + "[Quests] Event " + ChatColor.DARK_PURPLE + name + ChatColor.GOLD + " is missing " + ChatColor.RED + "mob-spawn-types:");
return null;
}
} else {
Quests.printSevere(ChatColor.GOLD + "[Quests] " + ChatColor.RED + "mob-spawn-locations: " + ChatColor.GOLD + "inside Event " + ChatColor.DARK_PURPLE + name + ChatColor.GOLD + " is not a list of locations!");
return null;
}
} }
if (data.contains(eventKey + "lightning-strikes")) { if (data.contains(eventKey + "lightning-strikes")) {

View File

@ -7,10 +7,12 @@ import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import me.blackvein.quests.prompts.ItemStackPrompt; import me.blackvein.quests.prompts.ItemStackPrompt;
import me.blackvein.quests.util.CK; import me.blackvein.quests.util.CK;
import me.blackvein.quests.util.ItemUtil; import me.blackvein.quests.util.ItemUtil;
import me.blackvein.quests.util.Lang; import me.blackvein.quests.util.Lang;
import me.blackvein.quests.util.QuestMob;
import net.citizensnpcs.api.CitizensAPI; import net.citizensnpcs.api.CitizensAPI;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
@ -21,7 +23,15 @@ import org.bukkit.World;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.conversations.*; import org.bukkit.conversations.ConversationAbandonedEvent;
import org.bukkit.conversations.ConversationAbandonedListener;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.ConversationFactory;
import org.bukkit.conversations.ConversationPrefix;
import org.bukkit.conversations.FixedSetPrompt;
import org.bukkit.conversations.NumericPrompt;
import org.bukkit.conversations.Prompt;
import org.bukkit.conversations.StringPrompt;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffect;
@ -184,8 +194,6 @@ public class EventFactory implements ConversationAbandonedListener, ColorUtil{
context.setSessionData(CK.E_WORLD_THUNDER, null); context.setSessionData(CK.E_WORLD_THUNDER, null);
context.setSessionData(CK.E_WORLD_THUNDER_DURATION, null); context.setSessionData(CK.E_WORLD_THUNDER_DURATION, null);
context.setSessionData(CK.E_MOB_TYPES, null); context.setSessionData(CK.E_MOB_TYPES, null);
context.setSessionData(CK.E_MOB_AMOUNTS, null);
context.setSessionData(CK.E_MOB_LOCATIONS, null);
context.setSessionData(CK.E_LIGHTNING, null); context.setSessionData(CK.E_LIGHTNING, null);
context.setSessionData(CK.E_POTION_TYPES, null); context.setSessionData(CK.E_POTION_TYPES, null);
context.setSessionData(CK.E_POTION_DURATIONS, null); context.setSessionData(CK.E_POTION_DURATIONS, null);
@ -233,7 +241,7 @@ public class EventFactory implements ConversationAbandonedListener, ColorUtil{
LinkedList<String> effs = new LinkedList<String>(); LinkedList<String> effs = new LinkedList<String>();
LinkedList<String> locs = new LinkedList<String>(); LinkedList<String> locs = new LinkedList<String>();
for(Entry e : event.effects.entrySet()){ for(Entry<?, ?> e : event.effects.entrySet()){
effs.add(((Effect) e.getKey()).toString()); effs.add(((Effect) e.getKey()).toString());
locs.add(Quests.getLocationInfo((Location) e.getValue())); locs.add(Quests.getLocationInfo((Location) e.getValue()));
@ -259,24 +267,15 @@ public class EventFactory implements ConversationAbandonedListener, ColorUtil{
} }
if(event.mobSpawnTypes != null && event.mobSpawnTypes.isEmpty() == false){ if (event.mobSpawns != null && event.mobSpawns.isEmpty() == false) {
LinkedList<String> types = new LinkedList<String>(); LinkedList<String> questMobs = new LinkedList<String>();
LinkedList<String> locs = new LinkedList<String>();
LinkedList<Integer> amounts = new LinkedList<Integer>();
for(int i = 0; i < event.mobSpawnTypes.size(); i++){
types.add(Quester.prettyMobString(event.mobSpawnTypes.get(i)));
locs.add(Quests.getLocationInfo(event.mobSpawnLocs.get(i)));
amounts.add(event.mobSpawnAmounts.get(i));
for (QuestMob questMob : event.mobSpawns) {
questMobs.add(questMob.serialize());
} }
context.setSessionData(CK.E_MOB_TYPES, types); context.setSessionData(CK.E_MOB_TYPES, questMobs);
context.setSessionData(CK.E_MOB_AMOUNTS, amounts);
context.setSessionData(CK.E_MOB_LOCATIONS, locs);
} }
if(event.lightningStrikes != null && event.lightningStrikes.isEmpty() == false){ if(event.lightningStrikes != null && event.lightningStrikes.isEmpty() == false){
@ -571,15 +570,12 @@ public class EventFactory implements ConversationAbandonedListener, ColorUtil{
text += BLUE + "" + BOLD + "9" + RESET + YELLOW + " - " + Lang.get("eventEditorSetMobSpawns") + GRAY + " (" + Lang.get("noneSet") + ")\n"; text += BLUE + "" + BOLD + "9" + RESET + YELLOW + " - " + Lang.get("eventEditorSetMobSpawns") + GRAY + " (" + Lang.get("noneSet") + ")\n";
} else { } else {
LinkedList<String> types = (LinkedList<String>) context.getSessionData(CK.E_MOB_TYPES); LinkedList<String> types = (LinkedList<String>) context.getSessionData(CK.E_MOB_TYPES);
LinkedList<Integer> amounts = (LinkedList<Integer>) context.getSessionData(CK.E_MOB_AMOUNTS);
LinkedList<String> locations = (LinkedList<String>) context.getSessionData(CK.E_MOB_LOCATIONS);
text += BLUE + "" + BOLD + "9" + RESET + YELLOW + " - " + Lang.get("eventEditorSetMobSpawns") + "\n"; text += BLUE + "" + BOLD + "9" + RESET + YELLOW + " - " + Lang.get("eventEditorSetMobSpawns") + "\n";
for (String s : types) { for (String s : types) {
int amt = amounts.get(types.indexOf(s)); QuestMob qm = QuestMob.fromString(s);
String loc = locations.get(types.indexOf(s)); text += GRAY + " - " + AQUA + qm.getType().getName() + ((qm.getName() != null) ? ": " + qm.getName() : "") + GRAY + " x " + DARKAQUA + qm.getSpawnAmounts() + GRAY + " -> " + GREEN + Quests.getLocationInfo(qm.getSpawnLocation()) + "\n";
text += GRAY + " - " + AQUA + s + GRAY + " x " + DARKAQUA + amt + GRAY + " -> " + GREEN + loc + "\n";
} }
} }
@ -862,6 +858,7 @@ public class EventFactory implements ConversationAbandonedListener, ColorUtil{
return (String)context.getSessionData(path); return (String)context.getSessionData(path);
} }
@SuppressWarnings("unchecked")
private static LinkedList<String> getCStringList(ConversationContext context, String path){ private static LinkedList<String> getCStringList(ConversationContext context, String path){
return (LinkedList<String>)context.getSessionData(path); return (LinkedList<String>)context.getSessionData(path);
} }
@ -870,6 +867,7 @@ public class EventFactory implements ConversationAbandonedListener, ColorUtil{
return (Integer)context.getSessionData(path); return (Integer)context.getSessionData(path);
} }
@SuppressWarnings("unchecked")
private static LinkedList<Integer> getCIntList(ConversationContext context, String path){ private static LinkedList<Integer> getCIntList(ConversationContext context, String path){
return (LinkedList<Integer>)context.getSessionData(path); return (LinkedList<Integer>)context.getSessionData(path);
} }
@ -878,6 +876,7 @@ public class EventFactory implements ConversationAbandonedListener, ColorUtil{
return (Boolean)context.getSessionData(path); return (Boolean)context.getSessionData(path);
} }
@SuppressWarnings("unchecked")
private static LinkedList<Boolean> getCBooleanList(ConversationContext context, String path){ private static LinkedList<Boolean> getCBooleanList(ConversationContext context, String path){
return (LinkedList<Boolean>)context.getSessionData(path); return (LinkedList<Boolean>)context.getSessionData(path);
} }
@ -886,6 +885,7 @@ public class EventFactory implements ConversationAbandonedListener, ColorUtil{
return (Long)context.getSessionData(path); return (Long)context.getSessionData(path);
} }
@SuppressWarnings("unchecked")
private static LinkedList<Long> getCLongList(ConversationContext context, String path){ private static LinkedList<Long> getCLongList(ConversationContext context, String path){
return (LinkedList<Long>)context.getSessionData(path); return (LinkedList<Long>)context.getSessionData(path);
} }
@ -1007,16 +1007,39 @@ public class EventFactory implements ConversationAbandonedListener, ColorUtil{
} }
try {
if (context.getSessionData(CK.E_MOB_TYPES) != null) { if (context.getSessionData(CK.E_MOB_TYPES) != null) {
int count = 0;
LinkedList<String> types = getCStringList(context, CK.E_MOB_TYPES); for (String s : getCStringList(context, CK.E_MOB_TYPES)) {
LinkedList<Integer> amounts = getCIntList(context, CK.E_MOB_AMOUNTS); ConfigurationSection ss = section.getConfigurationSection("mob-spawns." + count);
LinkedList<String> locations = getCStringList(context, CK.E_MOB_LOCATIONS); if (ss == null) {
ss = section.createSection("mob-spawns." + count);
}
QuestMob questMob = QuestMob.fromString(s);
section.set("mob-spawn-types", types); if (questMob == null) continue;
section.set("mob-spawn-amounts", amounts);
section.set("mob-spawn-locations", locations);
ss.set("name", questMob.getName());
ss.set("spawn-location", Quests.getLocationInfo(questMob.getSpawnLocation()));
ss.set("mob-type", questMob.getType().getName());
ss.set("spawn-amounts", questMob.getSpawnAmounts());
ss.set("held-item", ItemUtil.serialize(questMob.inventory[0]));
ss.set("held-item-drop-chance", questMob.dropChances[0]);
ss.set("boots", ItemUtil.serialize(questMob.inventory[1]));
ss.set("boots-drop-chance", questMob.dropChances[1]);
ss.set("leggings", ItemUtil.serialize(questMob.inventory[2]));
ss.set("leggings-drop-chance", questMob.dropChances[2]);
ss.set("chest-plate", ItemUtil.serialize(questMob.inventory[3]));
ss.set("chest-plate-drop-chance", questMob.dropChances[3]);
ss.set("helmet", ItemUtil.serialize(questMob.inventory[4]));
ss.set("helmet-drop-chance", questMob.dropChances[4]);
count++;
}
}
} catch (Exception e) {
e.printStackTrace();
} }
if (context.getSessionData(CK.E_LIGHTNING) != null) { if (context.getSessionData(CK.E_LIGHTNING) != null) {
@ -1029,6 +1052,7 @@ public class EventFactory implements ConversationAbandonedListener, ColorUtil{
if (context.getSessionData(CK.E_COMMANDS) != null) { if (context.getSessionData(CK.E_COMMANDS) != null) {
LinkedList<String> commands = getCStringList(context, CK.E_COMMANDS); LinkedList<String> commands = getCStringList(context, CK.E_COMMANDS);
if (commands.isEmpty() == false)
section.set("commands", commands); section.set("commands", commands);
} }
@ -1855,57 +1879,27 @@ public class EventFactory implements ConversationAbandonedListener, ColorUtil{
} }
} }
private class MobPrompt extends FixedSetPrompt { private class MobPrompt extends StringPrompt {
public MobPrompt() {
super("1", "2", "3", "4", "5");
}
@Override @Override
public String getPromptText(ConversationContext context) { public String getPromptText(ConversationContext context) {
String text = GOLD + "- " + Lang.get("eventEditorMobSpawns") + " -\n"; String text = GOLD + "- " + Lang.get("eventEditorMobSpawns") + " -\n";
if (context.getSessionData(CK.E_MOB_TYPES) == null) { if (context.getSessionData(CK.E_MOB_TYPES) == null) {
text += BLUE + "" + BOLD + "1" + RESET + YELLOW + " - " + Lang.get("eventEditorSetMobTypes") + " (" + Lang.get("noneSet") + ")\n"; text += BLUE + "" + BOLD + "1" + RESET + YELLOW + " - " + Lang.get("eventEditorAddMobTypes") + " (" + Lang.get("noneSet") + ")\n";
text += GRAY + "2 - " + Lang.get("eventEditorSetMobAmounts") + " " + Lang.get("eventEditorNoTypesSet") + "\n"; text += BLUE + "" + BOLD + "2" + RESET + YELLOW + " - " + Lang.get("clear") + "\n";
text += GRAY + "3 - " + Lang.get("eventEditorAddSpawnLocation") + " " + Lang.get("eventEditorNoTypesSet") + "\n"; text += BLUE + "" + BOLD + "3" + RESET + YELLOW + " - " + Lang.get("done");
text += BLUE + "" + BOLD + "4" + RESET + YELLOW + " - " + Lang.get("clear") + "\n";
text += BLUE + "" + BOLD + "5" + RESET + YELLOW + " - " + Lang.get("done");
} else { } else {
LinkedList<String> types = (LinkedList<String>) context.getSessionData(CK.E_MOB_TYPES);
text += BLUE + "" + BOLD + "1" + RESET + YELLOW + " - " + Lang.get("eventEditorSetMobTypes") + "\n"; for (int i = 0; i < types.size(); i++) {
for (String s : (LinkedList<String>) context.getSessionData(CK.E_MOB_TYPES)) { QuestMob qm = QuestMob.fromString(types.get(i));
text += GRAY + " - " + AQUA + s + "\n"; text += GOLD + " " + (i + 1) + " - Edit: " + AQUA + qm.getType().getName() + ((qm.getName() != null) ? ": " + qm.getName() : "") + GRAY + " x " + DARKAQUA + qm.getSpawnAmounts() + GRAY + " -> " + GREEN + Quests.getLocationInfo(qm.getSpawnLocation()) + "\n";
} }
if (context.getSessionData(CK.E_MOB_AMOUNTS) == null) { text += BLUE + "" + BOLD + (types.size() + 1) + RESET + YELLOW + " - " + Lang.get("eventEditorAddMobTypes") + "\n";
text += BLUE + "" + BOLD + "2" + RESET + YELLOW + " - " + Lang.get("eventEditorSetMobAmounts") + " (" + Lang.get("noneSet") + ")\n"; text += BLUE + "" + BOLD + (types.size() + 2) + RESET + YELLOW + " - " + Lang.get("clear") + "\n";
text += GRAY + "3 - " + Lang.get("eventEditorAddSpawnLocation") + Lang.get("eventEditorNoAmountsSet") + "\n"; text += GREEN + "" + BOLD + (types.size() + 3) + RESET + YELLOW + " - " + Lang.get("done");
} else {
text += BLUE + "" + BOLD + "2" + RESET + YELLOW + " - " + Lang.get("eventEditorSetMobAmounts") + "\n";
for (int i : (LinkedList<Integer>) context.getSessionData(CK.E_MOB_AMOUNTS)) {
text += GRAY + " - " + DARKAQUA + i + "\n";
}
if (context.getSessionData(CK.E_MOB_LOCATIONS) == null) {
text += BLUE + "" + BOLD + "3" + RESET + YELLOW + " - " + Lang.get("eventEditorAddSpawnLocation") + " (" + Lang.get("noneSet") + ")\n";
} else {
text += BLUE + "" + BOLD + "3" + RESET + YELLOW + " - " + Lang.get("eventEditorAddSpawnLocation") + "\n";
for (String s : (LinkedList<String>) context.getSessionData(CK.E_MOB_LOCATIONS)) {
text += GRAY + " - " + GREEN + s + "\n";
}
}
}
text += BLUE + "" + BOLD + "4" + RESET + YELLOW + " - " + Lang.get("clear") + "\n";
text += GREEN + "" + BOLD + "5" + RESET + YELLOW + " - " + Lang.get("done");
} }
@ -1914,76 +1908,221 @@ public class EventFactory implements ConversationAbandonedListener, ColorUtil{
} }
@Override @Override
protected Prompt acceptValidatedInput(ConversationContext context, String input) { public Prompt acceptInput(ConversationContext context, String input) {
if (context.getSessionData(CK.E_MOB_TYPES) == null) {
if (input.equalsIgnoreCase("1")) { if (input.equalsIgnoreCase("1")) {
return new MobTypesPrompt(); return new QuestMobPrompt(0, null);
} else if (input.equalsIgnoreCase("2")) { } else if (input.equalsIgnoreCase("2")) {
if (context.getSessionData(CK.E_MOB_TYPES) == null) {
context.getForWhom().sendRawMessage(RED + Lang.get("eventEditorMustSetMobTypesFirst"));
return new MobPrompt();
} else {
return new MobAmountsPrompt();
}
} else if (input.equalsIgnoreCase("3")) {
if (context.getSessionData(CK.E_MOB_TYPES) == null) {
context.getForWhom().sendRawMessage(RED + Lang.get("eventEditorMustSetMobTypesAndAmountsFirst"));
return new MobPrompt();
} else if (context.getSessionData(CK.E_MOB_AMOUNTS) == null) {
context.getForWhom().sendRawMessage(RED + Lang.get("eventEditorMustSetMobAmountsFirst"));
return new MobPrompt();
} else {
selectedMobLocations.put((Player) context.getForWhom(), null);
return new MobLocationPrompt();
}
} else if (input.equalsIgnoreCase("4")) {
context.getForWhom().sendRawMessage(YELLOW + Lang.get("eventEditorMobSpawnsCleared")); context.getForWhom().sendRawMessage(YELLOW + Lang.get("eventEditorMobSpawnsCleared"));
context.setSessionData(CK.E_MOB_TYPES, null); context.setSessionData(CK.E_MOB_TYPES, null);
context.setSessionData(CK.E_MOB_AMOUNTS, null);
context.setSessionData(CK.E_MOB_LOCATIONS, null);
return new MobPrompt(); return new MobPrompt();
} else if (input.equalsIgnoreCase("5")) { } else if (input.equalsIgnoreCase("3")) {
int one;
int two;
int three;
if (context.getSessionData(CK.E_MOB_TYPES) != null) {
one = ((List<String>) context.getSessionData(CK.E_MOB_TYPES)).size();
} else {
one = 0;
}
if (context.getSessionData(CK.E_MOB_AMOUNTS) != null) {
two = ((List<Integer>) context.getSessionData(CK.E_MOB_AMOUNTS)).size();
} else {
two = 0;
}
if (context.getSessionData(CK.E_MOB_LOCATIONS) != null) {
three = ((List<String>) context.getSessionData(CK.E_MOB_LOCATIONS)).size();
} else {
three = 0;
}
if (one == two && two == three) {
return new CreateMenuPrompt(); return new CreateMenuPrompt();
}
} else { } else {
context.getForWhom().sendRawMessage(RED + Lang.get("eventEditorListSizeMismatch")); LinkedList<String> types = (LinkedList<String>) context.getSessionData(CK.E_MOB_TYPES);
int inp = -1;
try {
inp = Integer.parseInt(input);
} catch (Exception e) {
context.getForWhom().sendRawMessage(RED + Lang.get("eventEditorNotANumber"));
return new MobPrompt(); return new MobPrompt();
} }
} if (inp == types.size() + 1) {
return null; return new QuestMobPrompt(inp - 1, null);
} else if (inp == types.size() + 2) {
context.getForWhom().sendRawMessage(YELLOW + Lang.get("eventEditorMobSpawnsCleared"));
context.setSessionData(CK.E_MOB_TYPES, null);
return new MobPrompt();
} else if (inp == types.size() + 3) {
return new CreateMenuPrompt();
} else if (inp > types.size()){
return new MobPrompt();
} else {
return new QuestMobPrompt(inp - 1, QuestMob.fromString(types.get(inp - 1)));
} }
} }
private class MobTypesPrompt extends StringPrompt { return new MobPrompt();
}
}
private class QuestMobPrompt extends StringPrompt {
private QuestMob questMob;
private Integer itemIndex = -1;
private Integer mobIndex;
public QuestMobPrompt(int mobIndex, QuestMob questMob) {
this.questMob = questMob;
this.mobIndex = mobIndex;
}
@Override @Override
public String getPromptText(ConversationContext context) { public String getPromptText(ConversationContext context) {
String text = GOLD + "- " + Lang.get("eventEditorAddMobTypes") + " - \n";
if (questMob == null) {
questMob = new QuestMob();
}
// Check/add newly made item
if(context.getSessionData("newItem") != null){
if(itemIndex >= 0){
questMob.inventory[itemIndex] = ((ItemStack) context.getSessionData("tempStack"));
itemIndex = -1;
}
context.setSessionData("newItem", null);
context.setSessionData("tempStack", null);
}
text += BLUE + "" + BOLD + "1" + RESET + YELLOW + " - " + Lang.get("eventEditorSetMobName") + GRAY + " (" + ((questMob.getName() == null) ? Lang.get("noneSet") : AQUA + questMob.getName()) + ")\n";
text += BLUE + "" + BOLD + "2" + RESET + YELLOW + " - " + Lang.get("eventEditorSetMobType") + GRAY + " (" + ((questMob.getType() == null) ? Lang.get("eventEditorNoTypesSet") : AQUA + questMob.getType().getName()) + GRAY + ")\n";
text += BLUE + "" + BOLD + "3" + RESET + YELLOW + " - " + Lang.get("eventEditorAddSpawnLocation") + GRAY + " (" + ((questMob.getSpawnLocation() == null) ? GRAY + Lang.get("noneSet") : AQUA + Quests.getLocationInfo(questMob.getSpawnLocation()) ) + GRAY + ")\n";
text += BLUE + "" + BOLD + "4" + RESET + YELLOW + " - " + Lang.get("eventEditorSetMobSpawnAmount") + GRAY +" (" + ((questMob.getSpawnAmounts() == null) ? GRAY + Lang.get("eventEditorNoAmountsSet") : AQUA + "" + questMob.getSpawnAmounts()) + GRAY + ")\n";
text += BLUE + "" + BOLD + "5" + RESET + YELLOW + " - " + Lang.get("eventEditorSetMobItemInHand") + GRAY +" (" + ((questMob.inventory[0] == null) ? GRAY + Lang.get("noneSet") : AQUA + ItemUtil.getDisplayString(questMob.inventory[0])) + GRAY + ")\n";
text += BLUE + "" + BOLD + "6" + RESET + YELLOW + " - " + Lang.get("eventEditorSetMobItemInHandDrop") + GRAY + " (" + ((questMob.dropChances[0] == null) ? GRAY + Lang.get("noneSet") : AQUA + "" + questMob.dropChances[0]) + GRAY + ")\n";
text += BLUE + "" + BOLD + "7" + RESET + YELLOW + " - " + Lang.get("eventEditorSetMobBoots") + GRAY + " (" + ((questMob.inventory[1] == null) ? GRAY + Lang.get("noneSet") : AQUA + ItemUtil.getDisplayString(questMob.inventory[1])) + GRAY + ")\n";
text += BLUE + "" + BOLD + "8" + RESET + YELLOW + " - " + Lang.get("eventEditorSetMobBootsDrop") + GRAY + " (" + ((questMob.dropChances[1] == null) ? GRAY + Lang.get("noneSet") : AQUA + "" + questMob.dropChances[1]) + GRAY + ")\n";
text += BLUE + "" + BOLD + "9" + RESET + YELLOW + " - " + Lang.get("eventEditorSetMobLeggings") + GRAY + " (" + ((questMob.inventory[2] == null) ? GRAY + Lang.get("noneSet") : AQUA + ItemUtil.getDisplayString(questMob.inventory[2])) + GRAY + ")\n";
text += BLUE + "" + BOLD + "10" + RESET + YELLOW + " - " + Lang.get("eventEditorSetMobLeggingsDrop") + GRAY + " (" + ((questMob.dropChances[2] == null) ? GRAY + Lang.get("noneSet") : AQUA + "" + questMob.dropChances[2]) + GRAY + ")\n";
text += BLUE + "" + BOLD + "11" + RESET + YELLOW + " - " + Lang.get("eventEditorSetMobChestPlate") + GRAY + " (" + ((questMob.inventory[3] == null) ? GRAY + Lang.get("noneSet") : AQUA + ItemUtil.getDisplayString(questMob.inventory[3])) + GRAY + ")\n";
text += BLUE + "" + BOLD + "12" + RESET + YELLOW + " - " + Lang.get("eventEditorSetMobChestPlateDrop") + GRAY + " (" + ((questMob.dropChances[3] == null) ? GRAY + Lang.get("noneSet") : AQUA + "" + questMob.dropChances[3]) + GRAY + ")\n";
text += BLUE + "" + BOLD + "13" + RESET + YELLOW + " - " + Lang.get("eventEditorSetMobHelmet") + GRAY + " (" + ((questMob.inventory[4] == null) ? GRAY + Lang.get("noneSet") : AQUA + ItemUtil.getDisplayString(questMob.inventory[4])) + GRAY + ")\n";
text += BLUE + "" + BOLD + "14" + RESET + YELLOW + " - " + Lang.get("eventEditorSetMobHelmetDrop") + GRAY + " (" + ((questMob.dropChances[4] == null) ? GRAY + Lang.get("noneSet") : AQUA + "" + questMob.dropChances[4]) + GRAY + ")\n";
text += GREEN + "" + BOLD + "15" + RESET + YELLOW + " - " + Lang.get("done") + "\n";
text += RED + "" + BOLD + "16" + RESET + YELLOW + " - " + Lang.get("cancel");
return text;
}
@SuppressWarnings("unchecked")
@Override
public Prompt acceptInput(ConversationContext context, String input) {
if (input.equalsIgnoreCase("1")) {
return new MobNamePrompt(mobIndex, questMob);
} else if (input.equalsIgnoreCase("2")) {
return new MobTypePrompt(mobIndex, questMob);
} else if (input.equalsIgnoreCase("3")) {
selectedMobLocations.put((Player) context.getForWhom(), null);
return new MobLocationPrompt(mobIndex, questMob);
} else if (input.equalsIgnoreCase("4")) {
return new MobAmountPrompt(mobIndex, questMob);
} else if (input.equalsIgnoreCase("5")) {
itemIndex = 0;
return new ItemStackPrompt(QuestMobPrompt.this);
} else if (input.equalsIgnoreCase("6")) {
return new MobDropPrompt(0, mobIndex, questMob);
} else if (input.equalsIgnoreCase("7")) {
itemIndex = 1;
return new ItemStackPrompt(QuestMobPrompt.this);
} else if (input.equalsIgnoreCase("8")) {
return new MobDropPrompt(1, mobIndex, questMob);
} else if (input.equalsIgnoreCase("9")) {
itemIndex = 2;
return new ItemStackPrompt(QuestMobPrompt.this);
} else if (input.equalsIgnoreCase("10")) {
return new MobDropPrompt(2, mobIndex, questMob);
} else if (input.equalsIgnoreCase("11")) {
itemIndex = 3;
return new ItemStackPrompt(QuestMobPrompt.this);
} else if (input.equalsIgnoreCase("12")) {
return new MobDropPrompt(3, mobIndex, questMob);
} else if (input.equalsIgnoreCase("13")) {
itemIndex = 4;
return new ItemStackPrompt(QuestMobPrompt.this);
} else if (input.equalsIgnoreCase("14")) {
return new MobDropPrompt(4, mobIndex, questMob);
} else if (input.equalsIgnoreCase("15")) {
if (questMob.getType() == null) {
context.getForWhom().sendRawMessage(RED + Lang.get("eventEditorMustSetMobTypesFirst"));
return new QuestMobPrompt(mobIndex, questMob);
} else if (questMob.getSpawnLocation() == null) {
context.getForWhom().sendRawMessage(RED + Lang.get("eventEditorMustSetMobLocationFirst"));
return new QuestMobPrompt(mobIndex, questMob);
} else if (questMob.getSpawnAmounts() == null) {
context.getForWhom().sendRawMessage(RED + Lang.get("eventEditorMustSetMobAmountsFirst"));
return new QuestMobPrompt(mobIndex, questMob);
}
if (context.getSessionData(CK.E_MOB_TYPES) == null) {
LinkedList<String> list = new LinkedList<String>();
list.add(questMob.serialize());
context.setSessionData(CK.E_MOB_TYPES, list);
} else {
if (((LinkedList<String>) context.getSessionData(CK.E_MOB_TYPES)).isEmpty()) {
LinkedList<String> list = new LinkedList<String>();
list.add(questMob.serialize());
context.setSessionData(CK.E_MOB_TYPES, list);
} else {
LinkedList<String> list = (LinkedList<String>) context.getSessionData(CK.E_MOB_TYPES);
list.set(mobIndex, questMob.serialize());
context.setSessionData(CK.E_MOB_TYPES, list);
}
}
return new MobPrompt();
} else if (input.equalsIgnoreCase("16")) {
return new MobPrompt();
} else {
return new QuestMobPrompt(mobIndex, questMob);
}
}
}
private class MobNamePrompt extends StringPrompt {
private QuestMob questMob;
private Integer mobIndex;
public MobNamePrompt (int mobIndex, QuestMob questMob) {
this.questMob = questMob;
this.mobIndex = mobIndex;
}
@Override
public String getPromptText(ConversationContext context) {
String text = YELLOW + Lang.get("eventEditorSetMobNamePrompt");
return text;
}
@Override
public Prompt acceptInput(ConversationContext context, String input) {
if (input.equalsIgnoreCase(Lang.get("cmdCancel"))) {
return new QuestMobPrompt(mobIndex, questMob);
} else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) {
questMob.setName(null);
return new QuestMobPrompt(mobIndex, questMob);
} else {
input = ChatColor.translateAlternateColorCodes('&', input);
questMob.setName(input);
return new QuestMobPrompt(mobIndex, questMob);
}
}
}
private class MobTypePrompt extends StringPrompt {
private QuestMob questMob;
private Integer mobIndex;
public MobTypePrompt (int mobIndex, QuestMob questMob) {
this.questMob = questMob;
this.mobIndex = mobIndex;
}
@Override
public String getPromptText(ConversationContext arg0) {
String mobs = PINK + "- " + Lang.get("mobs") + " - \n"; String mobs = PINK + "- " + Lang.get("mobs") + " - \n";
mobs += PURPLE + "Bat, "; mobs += PURPLE + "Bat, ";
mobs += PURPLE + "Blaze, "; mobs += PURPLE + "Blaze, ";
@ -2015,39 +2154,37 @@ public class EventFactory implements ConversationAbandonedListener, ColorUtil{
mobs += PURPLE + "Zombie\n"; mobs += PURPLE + "Zombie\n";
return mobs + YELLOW + Lang.get("eventEditorSetMobTypesPrompt"); return mobs + YELLOW + Lang.get("eventEditorSetMobTypesPrompt");
} }
@Override @Override
public Prompt acceptInput(ConversationContext context, String input) { public Prompt acceptInput(ConversationContext context, String input) {
Player player = (Player) context.getForWhom(); Player player = (Player) context.getForWhom();
if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) { if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) {
LinkedList<String> mobTypes = new LinkedList<String>(); if (Quests.getMobType(input) != null) {
for (String s : input.split(" ")) {
if (Quests.getMobType(s) != null) { questMob.setType(Quests.getMobType(input));
mobTypes.add(Quester.prettyMobString(Quests.getMobType(s)));
context.setSessionData(CK.E_MOB_TYPES, mobTypes);
} else { } else {
player.sendMessage(PINK + s + " " + RED + Lang.get("eventEditorInvalidMob")); player.sendMessage(PINK + input + " " + RED + Lang.get("eventEditorInvalidMob"));
return new MobTypesPrompt(); return new MobTypePrompt(mobIndex, questMob);
}
}
}
return new MobPrompt();
} }
} }
private class MobAmountsPrompt extends StringPrompt { return new QuestMobPrompt(mobIndex, questMob);
}
}
private class MobAmountPrompt extends StringPrompt {
private QuestMob questMob;
private Integer mobIndex;
public MobAmountPrompt (int mobIndex, QuestMob questMob) {
this.questMob = questMob;
this.mobIndex = mobIndex;
}
@Override @Override
public String getPromptText(ConversationContext context) { public String getPromptText(ConversationContext context) {
@ -2063,43 +2200,43 @@ public class EventFactory implements ConversationAbandonedListener, ColorUtil{
if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) { if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) {
LinkedList<Integer> mobAmounts = new LinkedList<Integer>();
for (String s : input.split(" ")) {
try { try {
int i = Integer.parseInt(s); int i = Integer.parseInt(input);
if (i < 1) { if (i < 1) {
player.sendMessage(PINK + input + " " + RED + Lang.get("eventEditorNotGreaterThanZero")); player.sendMessage(PINK + input + " " + RED + Lang.get("eventEditorNotGreaterThanZero"));
return new MobAmountsPrompt(); return new MobAmountPrompt(mobIndex, questMob);
} }
mobAmounts.add(i); questMob.setSpawnAmounts(i);
return new QuestMobPrompt(mobIndex, questMob);
} catch (Exception e) { } catch (Exception e) {
player.sendMessage(PINK + input + " " + RED + Lang.get("eventEditorNotANumber")); player.sendMessage(PINK + input + " " + RED + Lang.get("eventEditorNotANumber"));
return new MobAmountsPrompt(); return new MobAmountPrompt(mobIndex, questMob);
} }
} }
context.setSessionData(CK.E_MOB_AMOUNTS, mobAmounts); return new QuestMobPrompt(mobIndex, questMob);
}
return new MobPrompt();
} }
} }
private class MobLocationPrompt extends StringPrompt { private class MobLocationPrompt extends StringPrompt {
private QuestMob questMob;
private Integer mobIndex;
public MobLocationPrompt (int mobIndex, QuestMob questMob) {
this.questMob = questMob;
this.mobIndex = mobIndex;
}
@Override @Override
public String getPromptText(ConversationContext context) { public String getPromptText(ConversationContext context) {
return YELLOW + Lang.get("eventEditorMobLocationPrompt"); return YELLOW + Lang.get("eventEditorSetMobLocationPrompt");
} }
@ -2115,36 +2252,71 @@ public class EventFactory implements ConversationAbandonedListener, ColorUtil{
Location loc = block.getLocation(); Location loc = block.getLocation();
LinkedList<String> locs; questMob.setSpawnLocation(loc);
if (context.getSessionData(CK.E_MOB_LOCATIONS) != null) {
locs = (LinkedList<String>) context.getSessionData(CK.E_MOB_LOCATIONS);
} else {
locs = new LinkedList<String>();
}
locs.add(Quests.getLocationInfo(loc));
context.setSessionData(CK.E_MOB_LOCATIONS, locs);
selectedMobLocations.remove(player); selectedMobLocations.remove(player);
} else { } else {
player.sendMessage(RED + Lang.get("eventEditorSelectBlockFirst")); player.sendMessage(RED + Lang.get("eventEditorSelectBlockFirst"));
return new MobLocationPrompt(); return new MobLocationPrompt(mobIndex, questMob);
} }
return new MobPrompt(); return new QuestMobPrompt(mobIndex, questMob);
} else if (input.equalsIgnoreCase(Lang.get("cmdCancel"))) { } else if (input.equalsIgnoreCase(Lang.get("cmdCancel"))) {
selectedMobLocations.remove(player); selectedMobLocations.remove(player);
return new MobPrompt(); return new QuestMobPrompt(mobIndex, questMob);
} else { } else {
return new MobLocationPrompt(); return new MobLocationPrompt(mobIndex, questMob);
} }
} }
} }
private class MobDropPrompt extends StringPrompt {
private QuestMob questMob;
private Integer mobIndex;
private Integer invIndex;
public MobDropPrompt (int invIndex, int mobIndex ,QuestMob questMob) {
this.questMob = questMob;
this.mobIndex = mobIndex;
this.invIndex = invIndex;
}
@Override
public String getPromptText(ConversationContext context) {
String text = YELLOW + Lang.get("eventEditorSetDropChance");
return text;
}
@Override
public Prompt acceptInput(ConversationContext context, String input) {
float chance = 0.0F;
if (input.equalsIgnoreCase(Lang.get("cmdCancel"))) {
return new QuestMobPrompt(mobIndex, questMob);
}
try {
chance = Float.parseFloat(input);
} catch (Exception e) {
context.getForWhom().sendRawMessage(RED + Lang.get("eventEditorInvalidDropChance"));
return new MobDropPrompt(invIndex, mobIndex, questMob);
}
if (chance > 1 || chance < 0) {
context.getForWhom().sendRawMessage(RED + Lang.get("eventEditorInvalidDropChance"));
return new MobDropPrompt(invIndex, mobIndex, questMob);
}
questMob.dropChances[invIndex] = chance;
return new QuestMobPrompt(mobIndex, questMob);
}
}
private class LightningPrompt extends StringPrompt { private class LightningPrompt extends StringPrompt {
@Override @Override

View File

@ -1,19 +1,19 @@
package me.blackvein.quests; package me.blackvein.quests;
import com.gmail.nossr50.api.ExperienceAPI;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.util.player.UserManager;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import me.blackvein.quests.util.ItemUtil; import me.blackvein.quests.util.ItemUtil;
import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPC;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory; import org.bukkit.inventory.PlayerInventory;
import com.gmail.nossr50.util.player.UserManager;
public class Quest { public class Quest {
public String name; public String name;

View File

@ -570,7 +570,7 @@ public class RewardsPrompt extends FixedSetPrompt implements ColorUtil{
String skillList = String skillList =
GOLD + "-Skill List-\n" + GOLD + "-Skill List-\n" +
AQUA + "Acrobatics\n" + AQUA + "Acrobatics\n" +
AQUA + "All\n" + GRAY + "All\n" +
AQUA + "Archery\n" + AQUA + "Archery\n" +
AQUA + "Axes\n" + AQUA + "Axes\n" +
AQUA + "Excavation\n" + AQUA + "Excavation\n" +

View File

@ -93,8 +93,6 @@ public class CK {
public static final String E_WORLD_THUNDER = "evtThunderWorld"; public static final String E_WORLD_THUNDER = "evtThunderWorld";
public static final String E_WORLD_THUNDER_DURATION = "evtThunderDuration"; public static final String E_WORLD_THUNDER_DURATION = "evtThunderDuration";
public static final String E_MOB_TYPES = "evtMobTypes"; public static final String E_MOB_TYPES = "evtMobTypes";
public static final String E_MOB_AMOUNTS = "evtMobAmounts";
public static final String E_MOB_LOCATIONS = "evtMobLocations";
public static final String E_LIGHTNING = "evtLightningStrikes"; public static final String E_LIGHTNING = "evtLightningStrikes";
public static final String E_POTION_TYPES = "evtPotionTypes"; public static final String E_POTION_TYPES = "evtPotionTypes";
public static final String E_POTION_DURATIONS = "evtPotionDurations"; public static final String E_POTION_DURATIONS = "evtPotionDurations";

View File

@ -70,6 +70,7 @@ public class ItemUtil implements ColorUtil{
// //
public static ItemStack readItemStack(String data){ public static ItemStack readItemStack(String data){
if (data == null) return null;
ItemStack stack = null; ItemStack stack = null;
String[] args = data.split(":"); String[] args = data.split(":");
ItemMeta meta = null; ItemMeta meta = null;
@ -108,6 +109,8 @@ public class ItemUtil implements ColorUtil{
String serial; String serial;
if (is == null) return null;
serial = "id-" + is.getTypeId(); serial = "id-" + is.getTypeId();
serial += ":amount-" + is.getAmount(); serial += ":amount-" + is.getAmount();
if(is.getDurability() != 0) if(is.getDurability() != 0)

View File

@ -225,16 +225,32 @@ public class Lang {
en.put("eventEditorEffectLocationPrompt", "Right-click on a block to play an effect at, then enter \"add\" to add it to the list, or enter \"cancel\" to return"); en.put("eventEditorEffectLocationPrompt", "Right-click on a block to play an effect at, then enter \"add\" to add it to the list, or enter \"cancel\" to return");
en.put("eventEditorMobSpawns", "Event Mob Spawns"); en.put("eventEditorMobSpawns", "Event Mob Spawns");
en.put("eventEditorSetMobTypes", "Set mob types"); en.put("eventEditorAddMobTypes", "Add mob");
en.put("eventEditorNoTypesSet", "(No types set)"); en.put("eventEditorNoTypesSet", "(No type set)");
en.put("eventEditorMustSetMobTypesFirst", "You must set mob types first!"); en.put("eventEditorMustSetMobTypesFirst", "You must set the mob type first!");
en.put("eventEditorSetMobAmounts", "Set mob amounts"); en.put("eventEditorSetMobAmounts", "Set mob amount");
en.put("eventEditorNoAmountsSet", "(No amounts set)"); en.put("eventEditorNoAmountsSet", "(No amounts set)");
en.put("eventEditorMustSetMobAmountsFirst", "You must set mob amounts first!"); en.put("eventEditorMustSetMobAmountsFirst", "You must set mob amount first!");
en.put("eventEditorMustSetMobTypesAndAmountsFirst", "You must set mob types and amounts first!"); en.put("eventEditorAddSpawnLocation", "Set spawn location");
en.put("eventEditorAddSpawnLocation", "Add spawn location");
en.put("eventEditorMobSpawnsCleared", "Mob spawns cleared."); en.put("eventEditorMobSpawnsCleared", "Mob spawns cleared.");
en.put("eventEditorMustSetMobLocationFirst", "You must set a spawn-location first!");
en.put("eventEditorInvalidMob", "___ is not a valid mob name!"); en.put("eventEditorInvalidMob", "___ is not a valid mob name!");
en.put("eventEditorSetMobName", "Set custom name for mob");
en.put("eventEditorSetMobType", "Set mob type");
en.put("eventEditorSetMobItemInHand", "Set item in hand");
en.put("eventEditorSetMobItemInHandDrop", "Set drop chance of item in hand");
en.put("eventEditorSetMobBoots", "Set boots");
en.put("eventEditorSetMobBootsDrop", "Set drop chance of boots");
en.put("eventEditorSetMobLeggings", "Set leggings");
en.put("eventEditorSetMobLeggingsDrop", "Set drop chance of leggings");
en.put("eventEditorSetMobChestPlate", "Set chest plate");
en.put("eventEditorSetMobChestPlateDrop", "Set drop chance of chest plate");
en.put("eventEditorSetMobHelmet", "Set helmet");
en.put("eventEditorSetMobHelmetDrop", "Set drop chance of helmet");
en.put("eventEditorSetMobSpawnLoc", "Right-click on a block to spawn a mob at, then enter \"add\" to the confirm it, or enter \"cancel\" to return");
en.put("eventEditorSetMobSpawnAmount", "Set the amount of mobs to spawn");
en.put("eventEditorSetDropChance", "Set the drop chance");
en.put("eventEditorInvalidDropChance", "Drop chance has to be between 0.0 and 1.0");
en.put("eventEditorLightningPrompt", "Right-click on a block to spawn a lightning strike at, then enter \"add\" to add it to the list, or enter \"clear\" to clear the locations list, or \"cancel\" to return"); en.put("eventEditorLightningPrompt", "Right-click on a block to spawn a lightning strike at, then enter \"add\" to add it to the list, or enter \"clear\" to clear the locations list, or \"cancel\" to return");
@ -256,9 +272,10 @@ public class Lang {
en.put("eventEditorSetMessagePrompt", "Enter message, or enter \'none\' to delete, (or \'cancel\' to return)"); en.put("eventEditorSetMessagePrompt", "Enter message, or enter \'none\' to delete, (or \'cancel\' to return)");
en.put("eventEditorSetItemIDsPrompt", "Enter item IDs separating each one by a space, or enter \"cancel\" to return."); en.put("eventEditorSetItemIDsPrompt", "Enter item IDs separating each one by a space, or enter \"cancel\" to return.");
en.put("eventEditorSetItemAmountsPrompt", "Enter item amounts (numbers) separating each one by a space, or enter \"cancel\" to return."); en.put("eventEditorSetItemAmountsPrompt", "Enter item amounts (numbers) separating each one by a space, or enter \"cancel\" to return.");
en.put("eventEditorSetMobTypesPrompt", "Enter mob names separating each one by a space, or enter \"cancel\" to return"); en.put("eventEditorSetMobTypesPrompt", "Enter mob name, or enter \"cancel\" to return");
en.put("eventEditorSetMobAmountsPrompt", "Enter mob amounts separating each one by a space, or enter \"cancel\" to return"); en.put("eventEditorSetMobAmountsPrompt", "Enter mob amount, or enter \"cancel\" to return");
en.put("eventEditorMobLocationPrompt", "Right-click on a block to select it, then enter \"add\" to add it to the mob spawn location list, or enter \"cancel\" to return"); en.put("eventEditorSetMobNamePrompt", "Set the name for this mob, or enter \"cancel\" to return");
en.put("eventEditorSetMobLocationPrompt", "Right-click on a block to select it, then enter \"add\" to add it to the mob spawn location list, or enter \"cancel\" to return");
en.put("eventEditorSetPotionEffectsPrompt", "Enter potion effect types separating each one by a space, or enter \"cancel\" to return"); en.put("eventEditorSetPotionEffectsPrompt", "Enter potion effect types separating each one by a space, or enter \"cancel\" to return");
en.put("eventEditorSetPotionDurationsPrompt", "Enter effect durations (in milliseconds) separating each one by a space, or enter \"cancel\" to return"); en.put("eventEditorSetPotionDurationsPrompt", "Enter effect durations (in milliseconds) separating each one by a space, or enter \"cancel\" to return");
en.put("eventEditorSetPotionMagnitudesPrompt", "Enter potion effect magnitudes separating each one by a space, or enter \"cancel\" to return"); en.put("eventEditorSetPotionMagnitudesPrompt", "Enter potion effect magnitudes separating each one by a space, or enter \"cancel\" to return");
@ -306,7 +323,8 @@ public class Lang {
en.put("delay", "Delay"); en.put("delay", "Delay");
en.put("save", "Save"); en.put("save", "Save");
en.put("exit", "Exit"); en.put("exit", "Exit");
en.put("exited", "Exited."); en.put("exited", "Exited");
en.put("cancel", "Cancel");
en.put("yes", "Yes"); en.put("yes", "Yes");
en.put("no", "No"); en.put("no", "No");
en.put("clear", "Clear"); en.put("clear", "Clear");

View File

@ -0,0 +1,242 @@
package me.blackvein.quests.util;
import me.blackvein.quests.Quests;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_6_R2.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_6_R2.entity.CraftLivingEntity;
import org.bukkit.craftbukkit.v1_6_R2.inventory.CraftItemStack;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity;
import org.bukkit.inventory.EntityEquipment;
import org.bukkit.inventory.ItemStack;
public class QuestMob {
private String name = null;
private EntityType entityType = null;
private Location spawnLocation = null;
private Integer spawnAmounts = null;
public ItemStack[] inventory = new ItemStack[5];
public Float[] dropChances = new Float[5];
public QuestMob (EntityType entityType, Location spawnLocation, int spawnAmounts) {
this.entityType = entityType;
this.spawnLocation = spawnLocation;
this.spawnAmounts = spawnAmounts;
}
public QuestMob() {
}
public void setSpawnLocation(Location spawnLocation) {
this.spawnLocation = spawnLocation;
}
public Location getSpawnLocation() {
return spawnLocation;
}
public void setType(EntityType entityType) {
this.entityType = entityType;
}
public EntityType getType() {
return entityType;
}
public void setSpawnAmounts(int spawnAmounts) {
this.spawnAmounts = spawnAmounts;
}
public Integer getSpawnAmounts() {
return spawnAmounts;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setHelmet(ItemStack helmet, float dropChance) {
inventory[4] = helmet;
dropChances[4] = dropChance;
}
public void setChest(ItemStack chest, float dropChance) {
inventory[3] = chest;
dropChances[3] = dropChance;
}
public void setLeggings(ItemStack leggings, float dropChance) {
inventory[2] = leggings;
dropChances[2] = dropChance;
}
public void setBoots(ItemStack boots, float dropChance) {
inventory[1] = boots;
dropChances[1] = dropChance;
}
public void setHeldItem(ItemStack heldItem, float dropChance) {
inventory[0] = heldItem;
dropChances[0] = dropChance;
}
public void spawn() {
System.out.println("Spawned!");
World world = spawnLocation.getWorld();
for (int i = 0; i < spawnAmounts; i++) {
Entity entity = world.spawnEntity(spawnLocation, entityType);
if (name != null) {
((LivingEntity) entity).setCustomName(name);
((LivingEntity) entity).setCustomNameVisible(true);
}
for (int j = 0; j < 5; j++) {
if (inventory[j] != null)
((CraftEntity) entity).getHandle().setEquipment(j, CraftItemStack.asNMSCopy(inventory[j]));
}
EntityEquipment eq = ((CraftLivingEntity) entity).getEquipment();
if (dropChances[0] != null) eq.setItemInHandDropChance(dropChances[0]);
if (dropChances[1] != null) eq.setBootsDropChance(dropChances[1]);
if (dropChances[2] != null) eq.setLeggingsDropChance(dropChances[2]);
if (dropChances[3] != null) eq.setChestplateDropChance(dropChances[3]);
if (dropChances[4] != null) eq.setHelmetDropChance(dropChances[4]);
}
}
public String serialize() {
String string = "";
string += "type-" + entityType.getName();
if (name != null) string += "::name-" + name;
if (spawnLocation != null) string += "::spawn-" + Quests.getLocationInfo(spawnLocation);
if (spawnAmounts != null) string += "::amounts-" + spawnAmounts;
if (inventory[0] != null) {
string += "::hand-" + ItemUtil.serialize(inventory[0]);
string += "::hand_drop-" + dropChances[0];
}
if (inventory[1] != null) {
string += "::boots-" + ItemUtil.serialize(inventory[1]);
string += "::boots_drop-" + dropChances[1];
}
if (inventory[2] != null) {
string += "::leggings-" + ItemUtil.serialize(inventory[2]);
string += "::leggings_drop-" + dropChances[2];
}
if (inventory[3] != null) {
string += "::chest-" + ItemUtil.serialize(inventory[3]);
string += "::chest_drop-" + dropChances[3];
}
if (inventory[4] != null) {
string += "::helmet-" + ItemUtil.serialize(inventory[4]);
string += "::helmet_drop-" + dropChances[4];
}
return string;
}
public static QuestMob fromString(String str) {
String name = null;
EntityType entityType = null;
Location loc = null;
Integer amounts = null;
ItemStack[] inventory = new ItemStack[5];
Float[] dropChances = new Float[5];
String[] args = str.split("::");
for (String string : args) {
if (string.startsWith("type-")) {
entityType = Quests.getMobType(string.substring(5));
} else if (string.startsWith("name-")) {
name = string.substring(5);
} else if (string.startsWith("spawn-")) {
loc = Quests.getLocation(string.substring(6));
} else if (string.startsWith("amounts-")) {
amounts = Integer.parseInt(string.substring(8));
} else if (string.startsWith("hand-")) {
inventory[0] = ItemUtil.readItemStack(string.substring(5));
} else if (string.startsWith("hand_drop-")) {
dropChances[0] = Float.parseFloat(string.substring(10));
} else if (string.startsWith("boots-")) {
inventory[1] = ItemUtil.readItemStack(string.substring(6));
} else if (string.startsWith("boots_drop-")) {
dropChances[1] = Float.parseFloat(string.substring(11));
} else if (string.startsWith("leggings-")) {
inventory[2] = ItemUtil.readItemStack(string.substring(9));
} else if (string.startsWith("leggings_drop-")) {
dropChances[2] = Float.parseFloat(string.substring(14));
} else if (string.startsWith("chest-")) {
inventory[3] = ItemUtil.readItemStack(string.substring(6));
} else if (string.startsWith("chest_drop-")) {
dropChances[3] = Float.parseFloat(string.substring(11));
} else if (string.startsWith("helmet-")) {
inventory[4] = ItemUtil.readItemStack(string.substring(7));
} else if (string.startsWith("helmet_drop-")) {
dropChances[4] = Float.parseFloat(string.substring(12));
}
}
QuestMob qm = new QuestMob(entityType, loc, amounts);
qm.setName(name);
qm.inventory = inventory;
qm.dropChances = dropChances;
return qm;
}
@Override
public boolean equals(Object o) {
if ((o instanceof QuestMob) == false) {
return false;
}
QuestMob other = (QuestMob) o;
if (name.equalsIgnoreCase(other.name) == false)
return false;
if (entityType != other.entityType)
return false;
if (dropChances != other.dropChances)
return false;
if (inventory.length == other.inventory.length) {
for (int i = 0; i < inventory.length; i++) {
if (ItemUtil.compareItems(inventory[i], other.inventory[i], false) != 0)
return false;
}
} else {
return false;
}
if (spawnAmounts != other.spawnAmounts)
return false;
if (spawnLocation != other.spawnLocation)
return false;
return true;
}
}