From 188ac65798c2e1921fdc5a9e4072eded94c0b69d Mon Sep 17 00:00:00 2001 From: xcoldfyrex Date: Sat, 20 Apr 2013 18:46:21 -0700 Subject: [PATCH] initial commit --- .classpath | 12 +++ .project | 17 ++++ .settings/org.eclipse.core.resources.prefs | 2 + .settings/org.eclipse.jdt.core.prefs | 11 +++ plugin.yml | 15 +++ .../cfdigital/wafflecraft/WaffleCraft.java | 91 +++++++++++++++++++ .../wafflecraft/classes/ClassManager.java | 56 ++++++++++++ .../wafflecraft/classes/PlayerClass.java | 45 +++++++++ .../wafflecraft/classes/SkillClass.java | 39 ++++++++ .../cfdigital/wafflecraft/commands/Skill.java | 34 +++++++ .../cfdigital/wafflecraft/commands/WC.java | 64 +++++++++++++ .../wafflecraft/listeners/BlockListener.java | 15 +++ .../wafflecraft/listeners/PlayerListener.java | 64 +++++++++++++ .../cfdigital/wafflecraft/util/Config.java | 73 +++++++++++++++ .../wafflecraft/util/WaffleLogger.java | 34 +++++++ 15 files changed, 572 insertions(+) create mode 100644 .classpath create mode 100644 .project create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 plugin.yml create mode 100644 src/com/cfdigital/wafflecraft/WaffleCraft.java create mode 100644 src/com/cfdigital/wafflecraft/classes/ClassManager.java create mode 100644 src/com/cfdigital/wafflecraft/classes/PlayerClass.java create mode 100644 src/com/cfdigital/wafflecraft/classes/SkillClass.java create mode 100644 src/com/cfdigital/wafflecraft/commands/Skill.java create mode 100644 src/com/cfdigital/wafflecraft/commands/WC.java create mode 100644 src/com/cfdigital/wafflecraft/listeners/BlockListener.java create mode 100644 src/com/cfdigital/wafflecraft/listeners/PlayerListener.java create mode 100644 src/com/cfdigital/wafflecraft/util/Config.java create mode 100644 src/com/cfdigital/wafflecraft/util/WaffleLogger.java 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