diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..178d284
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.project b/.project
new file mode 100644
index 0000000..faf08f4
--- /dev/null
+++ b/.project
@@ -0,0 +1,17 @@
+
+
+ WaffleCraft
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..35b154c
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding//src/com/cfdigital/wafflecraft/WaffleCraft.java=UTF-8
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..8000cd6
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,11 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/plugin.yml b/plugin.yml
new file mode 100644
index 0000000..3bcb1a3
--- /dev/null
+++ b/plugin.yml
@@ -0,0 +1,15 @@
+name: WaffleCraft
+main: com.cfdigital.wafflecraft.WaffleCraft
+version: 1.0
+author: ColdFyre
+depend:
+ - Vault
+ - WaffleLib
+description: WaffleCraft
+commands:
+ Skill:
+ description: WaffleCraft main menu
+ usage: /skill
+ WC:
+ description: WaffleCraft administrative menu
+ usage: /wc
\ No newline at end of file
diff --git a/src/com/cfdigital/wafflecraft/WaffleCraft.java b/src/com/cfdigital/wafflecraft/WaffleCraft.java
new file mode 100644
index 0000000..0e20dad
--- /dev/null
+++ b/src/com/cfdigital/wafflecraft/WaffleCraft.java
@@ -0,0 +1,91 @@
+package com.cfdigital.wafflecraft;
+
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.entity.*;
+import org.bukkit.inventory.ItemStack;
+
+import org.bukkit.plugin.PluginManager;
+import org.bukkit.plugin.java.JavaPlugin;
+
+import com.cfdigital.wafflecraft.classes.ClassManager;
+import com.cfdigital.wafflecraft.classes.PlayerClass;
+import com.cfdigital.wafflecraft.commands.Skill;
+import com.cfdigital.wafflecraft.commands.WC;
+import com.cfdigital.wafflecraft.listeners.BlockListener;
+import com.cfdigital.wafflecraft.listeners.PlayerListener;
+import com.cfdigital.wafflecraft.util.Config;
+import com.cfdigital.wafflecraft.util.WaffleLogger;
+
+
+public class WaffleCraft extends JavaPlugin {
+
+ public WaffleCraft plugin;
+
+ public static String prefix = "§6[§aWaffleCraft§6]§f ";
+
+ public WaffleCraft() {
+ plugin = this;
+ }
+
+ private final PlayerListener playerListener = new PlayerListener(this);
+ private final BlockListener blockListener = new BlockListener(this);
+
+ @Override
+ public void onEnable()
+ {
+ PluginManager pm = getServer().getPluginManager();
+ pm.registerEvents(playerListener, this);
+ pm.registerEvents(blockListener, this);
+
+ Config config = new Config(this);
+
+ if (!config.loadClasses()){
+ WaffleLogger.severe("Failed to load classes! Disabling..");
+ this.plugin.onDisable();
+ }
+
+ getCommand("wc").setExecutor(new WC(this));
+ getCommand("skill").setExecutor(new Skill(this));
+
+ for (Player player : getServer().getOnlinePlayers()) {
+ PlayerClass pc = new PlayerClass(player);
+ ClassManager.addWafflePlayer(player, pc);
+ }
+ }
+
+ @Override
+ public void onDisable() {
+ plugin.getServer().getScheduler().cancelTasks(plugin);
+ }
+
+ public boolean rankAllowed(Material material) {
+ //probably came from placing or mining
+ return true;
+ }
+
+ public boolean rankAllowed(ItemStack itemstack) {
+ //was something that was crafted
+ return true;
+ }
+
+ public boolean rankAllowed(Item items) {
+ //probably picked up
+ return true;
+ }
+
+ public boolean rankAllowed(Player player, Block block) {
+ //broke/placed
+ return false;
+ }
+
+ public void showDenied(Player player) {
+ player.sendMessage(prefix + "Your rank is not high enough for this!");
+
+ }
+
+ public boolean isItemInClass(Material material) {
+ return false;
+
+ }
+}
\ No newline at end of file
diff --git a/src/com/cfdigital/wafflecraft/classes/ClassManager.java b/src/com/cfdigital/wafflecraft/classes/ClassManager.java
new file mode 100644
index 0000000..c0b2b37
--- /dev/null
+++ b/src/com/cfdigital/wafflecraft/classes/ClassManager.java
@@ -0,0 +1,56 @@
+package com.cfdigital.wafflecraft.classes;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+
+public class ClassManager {
+
+ private static HashMap waffleClasses = new HashMap();
+ private static HashMap playerClass = new HashMap();
+ private static List registeredItems = new ArrayList();
+
+ public static SkillClass WaffleClass(String className) {
+ if (waffleClasses.containsKey(className)) {
+ return waffleClasses.get(className);
+ }
+ return null;
+ }
+
+ public static boolean addWaffleClass(String className, SkillClass WC) {
+ if (waffleClasses.containsKey(className)) return false;
+ waffleClasses.put(className, WC);
+ return true;
+ }
+
+ public static boolean addWafflePlayer(Player player, PlayerClass pc) {
+ if (playerClass.containsKey(player)) return false;
+ playerClass.put(player, pc);
+ return true;
+ }
+
+ public static void clearWaffleClasses() {
+ waffleClasses.clear();
+ }
+
+ public static HashMap getWaffleClasses(){
+ return waffleClasses;
+ }
+
+ public static PlayerClass getPlayerClass(Player player) {
+ if (!playerClass.containsKey(player)) return null;
+ PlayerClass pc = playerClass.get(player);
+ return pc;
+ }
+
+ public static List getRegisteredItems() {
+ return registeredItems;
+ }
+
+ public static void addRegisteredItems(List registeredItems) {
+ ClassManager.registeredItems = registeredItems;
+ }
+}
\ No newline at end of file
diff --git a/src/com/cfdigital/wafflecraft/classes/PlayerClass.java b/src/com/cfdigital/wafflecraft/classes/PlayerClass.java
new file mode 100644
index 0000000..009f174
--- /dev/null
+++ b/src/com/cfdigital/wafflecraft/classes/PlayerClass.java
@@ -0,0 +1,45 @@
+package com.cfdigital.wafflecraft.classes;
+
+import org.bukkit.ChatColor;
+import org.bukkit.entity.Player;
+
+public class PlayerClass {
+
+ public PlayerClass(Player player) {
+ this.player = player;
+ }
+
+ public String getSkillClass() {
+ if (skillClass == null) {
+ return null;
+ }
+ return skillClass.toString();
+ }
+ public void setSkillClass(String skillClass) {
+ if (ClassManager.WaffleClass(skillClass) != null) {
+ this.skillClass = skillClass;
+ } else {
+ player.sendMessage(ChatColor.RED + "That class does not exist!");
+ }
+ }
+
+ public int getskillLevel() {
+ return skillLevel;
+ }
+
+ public void setskillLevel(int skillRank) {
+ this.skillLevel = skillRank;
+ }
+
+ public Player getPlayer() {
+ return player;
+ }
+
+ public void setPlayer(Player player) {
+ this.player = player;
+ }
+
+ private int skillLevel = 1;
+ private String skillClass;
+ private Player player;
+}
\ No newline at end of file
diff --git a/src/com/cfdigital/wafflecraft/classes/SkillClass.java b/src/com/cfdigital/wafflecraft/classes/SkillClass.java
new file mode 100644
index 0000000..63666f1
--- /dev/null
+++ b/src/com/cfdigital/wafflecraft/classes/SkillClass.java
@@ -0,0 +1,39 @@
+package com.cfdigital.wafflecraft.classes;
+
+import java.util.List;
+
+import org.bukkit.Material;
+import org.bukkit.craftbukkit.libs.jline.internal.Log;
+
+public class SkillClass {
+ public SkillClass (String className, List> classItems, int pointsRequired) {
+ this.setPointsRequired(pointsRequired);
+ int x = 0;
+ while (x < classItems.size()) {
+ Material material = Material.valueOf(classItems.get(x).toString());
+ Log.warn(material);
+ this.classItems.add(material);
+ }
+ }
+
+ public List getClassItems() {
+ return classItems;
+ }
+
+ public int getPointsRequired() {
+ return pointsRequired;
+ }
+
+ private void setPointsRequired(int pointsRequired) {
+ this.pointsRequired = pointsRequired;
+ }
+
+ public String getClassName() {
+ return className;
+ }
+
+ private List classItems;
+ private int pointsRequired;
+ private String className;
+
+}
\ No newline at end of file
diff --git a/src/com/cfdigital/wafflecraft/commands/Skill.java b/src/com/cfdigital/wafflecraft/commands/Skill.java
new file mode 100644
index 0000000..366910d
--- /dev/null
+++ b/src/com/cfdigital/wafflecraft/commands/Skill.java
@@ -0,0 +1,34 @@
+package com.cfdigital.wafflecraft.commands;
+
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.cfdigital.wafflecraft.WaffleCraft;
+
+public class Skill implements CommandExecutor {
+
+ WaffleCraft plugin;
+
+ public Skill(WaffleCraft plugin) {
+ this.plugin = plugin;
+ }
+
+ @Override
+ public boolean onCommand(CommandSender sender, Command command, String commandLabel, String[] args) {
+ String commandName = command.getName().toLowerCase();
+ String[] trimmedArgs = args;
+ Player player = (Player) sender;
+ if (commandName.equalsIgnoreCase("skill")) {
+ player.sendMessage("You have X SkillPoints left to spend");
+
+ return true;
+ }
+
+ if (commandName.equalsIgnoreCase("skill help")) {
+ return true;
+ }
+ return true;
+ }
+}
diff --git a/src/com/cfdigital/wafflecraft/commands/WC.java b/src/com/cfdigital/wafflecraft/commands/WC.java
new file mode 100644
index 0000000..720f2cb
--- /dev/null
+++ b/src/com/cfdigital/wafflecraft/commands/WC.java
@@ -0,0 +1,64 @@
+package com.cfdigital.wafflecraft.commands;
+
+import java.util.HashMap;
+
+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 com.cfdigital.wafflecraft.WaffleCraft;
+import com.cfdigital.wafflecraft.classes.ClassManager;
+import com.cfdigital.wafflecraft.classes.PlayerClass;
+import com.cfdigital.wafflecraft.classes.SkillClass;
+
+public class WC implements CommandExecutor {
+
+ WaffleCraft plugin;
+
+ public WC(WaffleCraft plugin) {
+ this.plugin = plugin;
+ }
+
+ @Override
+ public boolean onCommand(CommandSender sender, Command command, String commandLabel, String[] args) {
+ String commandName = command.getName().toLowerCase();
+ String[] trimmedArgs = args;
+ Player player = (Player) sender;
+ if (commandName.equalsIgnoreCase("wc")) {
+ PlayerClass pc = ClassManager.getPlayerClass(player);
+ if (trimmedArgs.length >= 1 ){
+ //show classes loaded
+ if (trimmedArgs[0].equalsIgnoreCase("classes")) {
+ player.sendMessage(WaffleCraft.prefix + "Loaded player classes"); {
+ HashMap hm = ClassManager.getWaffleClasses();
+ for (String key : hm.keySet()) {
+ player.sendMessage(key);
+ }
+ }
+ }
+
+ //set a class for self
+ if (trimmedArgs[0].equalsIgnoreCase("setclass") && trimmedArgs.length == 2 ){
+ String skillClass = trimmedArgs[1];
+ pc.setSkillClass(skillClass);
+ player.sendMessage(ChatColor.GREEN + "You are now the class " + skillClass);
+ }
+
+ //show info about self
+ if (trimmedArgs[0].equalsIgnoreCase("class")) {
+ String cn = pc.getSkillClass();
+ int level = pc.getskillLevel();
+ if (cn != null) {
+ player.sendMessage("You are a level " + level + " + cn");
+ } else {
+ player.sendMessage(ChatColor.RED + "You have not joined a class yet!");
+ }
+ }
+ }
+ return true;
+ }
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/com/cfdigital/wafflecraft/listeners/BlockListener.java b/src/com/cfdigital/wafflecraft/listeners/BlockListener.java
new file mode 100644
index 0000000..0744c25
--- /dev/null
+++ b/src/com/cfdigital/wafflecraft/listeners/BlockListener.java
@@ -0,0 +1,15 @@
+package com.cfdigital.wafflecraft.listeners;
+
+import org.bukkit.event.Listener;
+
+import com.cfdigital.wafflecraft.WaffleCraft;
+
+
+public class BlockListener implements Listener {
+
+ final WaffleCraft plugin;
+
+ public BlockListener(WaffleCraft instance) {
+ plugin = instance;
+ }
+}
diff --git a/src/com/cfdigital/wafflecraft/listeners/PlayerListener.java b/src/com/cfdigital/wafflecraft/listeners/PlayerListener.java
new file mode 100644
index 0000000..5c8d037
--- /dev/null
+++ b/src/com/cfdigital/wafflecraft/listeners/PlayerListener.java
@@ -0,0 +1,64 @@
+package com.cfdigital.wafflecraft.listeners;
+
+import org.bukkit.block.Block;
+import org.bukkit.entity.Item;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
+import org.bukkit.event.block.BlockBreakEvent;
+import org.bukkit.event.block.BlockPlaceEvent;
+import org.bukkit.event.inventory.CraftItemEvent;
+import org.bukkit.event.player.PlayerPickupItemEvent;
+import org.bukkit.inventory.ItemStack;
+
+import com.cfdigital.wafflecraft.WaffleCraft;
+
+public class PlayerListener implements Listener {
+
+ final WaffleCraft plugin;
+
+ public PlayerListener(WaffleCraft instance) {
+ plugin = instance;
+ }
+
+ //craft item
+ @EventHandler (priority = EventPriority.NORMAL)
+ public void onCraft(CraftItemEvent event) {
+ ItemStack item = event.getInventory().getResult();
+ if (!(plugin.rankAllowed(item))) {
+ event.setCancelled(true);
+ }
+ }
+
+ //pick up item
+ @EventHandler (priority = EventPriority.NORMAL)
+ public void onPickup(PlayerPickupItemEvent event) {
+ final Item item = event.getItem();
+ if (!(plugin.rankAllowed(item))) {
+ event.setCancelled(true);
+ plugin.showDenied(event.getPlayer());
+ }
+ }
+
+ //break block
+ @EventHandler (priority = EventPriority.NORMAL)
+ public void onBlockBreak(BlockBreakEvent event) {
+ final Block block = event.getBlock();
+ if (!(plugin.rankAllowed(event.getPlayer(), block))) {
+ event.setCancelled(true);
+ plugin.showDenied(event.getPlayer());
+ }
+ }
+
+ //place block
+ @EventHandler (priority = EventPriority.NORMAL)
+ public void onBlockPlace(BlockPlaceEvent event) {
+ final Block block = event.getBlock();
+ if (!(plugin.rankAllowed(event.getPlayer(), block))) {
+ event.setCancelled(true);
+ plugin.showDenied(event.getPlayer());
+ }
+ }
+
+
+}
diff --git a/src/com/cfdigital/wafflecraft/util/Config.java b/src/com/cfdigital/wafflecraft/util/Config.java
new file mode 100644
index 0000000..f26a203
--- /dev/null
+++ b/src/com/cfdigital/wafflecraft/util/Config.java
@@ -0,0 +1,73 @@
+package com.cfdigital.wafflecraft.util;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+import org.bukkit.configuration.InvalidConfigurationException;
+import org.bukkit.configuration.file.FileConfiguration;
+import org.bukkit.configuration.file.YamlConfiguration;
+import org.bukkit.plugin.java.JavaPlugin;
+
+import com.cfdigital.wafflecraft.WaffleCraft;
+import com.cfdigital.wafflecraft.classes.ClassManager;
+import com.cfdigital.wafflecraft.classes.SkillClass;
+
+public class Config extends JavaPlugin {
+
+ private FileConfiguration config;
+ private File classFile;
+ static YamlConfiguration ymlConfig;
+
+ final WaffleCraft plugin;
+
+
+ public Config(WaffleCraft instance) {
+ plugin = instance;
+ }
+
+ public boolean loadClasses() {
+ classFile = new File(plugin.getDataFolder(), "classes.yml");
+ config = plugin.getConfig();
+
+ if (!plugin.getDataFolder().exists()) {
+ plugin.getDataFolder().mkdirs();
+ }
+
+ try {
+ config.load(classFile);
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ return false;
+ } catch (IOException e) {
+ e.printStackTrace();
+ return false;
+ } catch (InvalidConfigurationException e) {
+ e.printStackTrace();
+ return false;
+ }
+ Map keys = config.getValues(true);
+ ClassManager.clearWaffleClasses();
+ for (String n : keys.keySet()) {
+ if (n.startsWith("classes")) {
+ String temp[] = n.split("\\.");
+ if (temp.length == 2) {
+ String className = temp[1];
+ int classPrice = config.getInt("classes." + className + ".price");
+ List classItems = config.getStringList("classes" + className + ".items");
+ if (classItems == null) {
+ WaffleLogger.warning("Class " + className + " has no materials!");
+ break;
+ }
+ SkillClass WC = new SkillClass(className, classItems, classPrice);
+ ClassManager.addWaffleClass(className, WC);
+ }
+ }
+ }
+
+ return true;
+
+ }
+}
\ No newline at end of file
diff --git a/src/com/cfdigital/wafflecraft/util/WaffleLogger.java b/src/com/cfdigital/wafflecraft/util/WaffleLogger.java
new file mode 100644
index 0000000..2afe0cf
--- /dev/null
+++ b/src/com/cfdigital/wafflecraft/util/WaffleLogger.java
@@ -0,0 +1,34 @@
+package com.cfdigital.wafflecraft.util;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class WaffleLogger {
+
+ public static final Logger log = Logger.getLogger("Minecraft");
+ public static final String logPrefix = colorConvert("BROWN") + "[" + colorConvert("LIGHT_GREEN") + "WaffleCraft" + colorConvert("BROWN") +"] " + colorConvert("RESET");
+
+ public static void severe(Object object) {
+ log.log(Level.SEVERE, logPrefix + colorConvert("LIGHT_RED") + object);
+ }
+
+ public static void info(Object object) {
+ log.log(Level.INFO, logPrefix + object);
+ }
+
+ public static void warning(Object object) {
+ log.log(Level.WARNING, logPrefix + colorConvert("LIGHT_YELLOW") + object);
+ }
+
+ private static String colorConvert(String color) {
+ if (color.equals("LIGHT_RED")) { return "\u001B[1;31m"; }
+ if (color.equals("LIGHT_GREEN")) { return "\u001B[1;32m"; }
+ if (color.equals("LIGHT_YELLOW")) { return "\u001B[1;33m"; }
+ if (color.equals("LIGHT_CYAN")) { return "\u001B[1;36m"; }
+ if (color.equals("RESET")) { return "\u001B[0m"; }
+ if (color.equals("BROWN")) { return "\u001B[0;33m"; }
+
+ return "";
+ }
+
+}
\ No newline at end of file