stormtrooper28

UnCrafter

Jul 22nd, 2015
398
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.97 KB | None | 0 0
  1. package github.stormtrooper28.unCrafter;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.io.Reader;
  7. import java.io.UnsupportedEncodingException;
  8. import java.util.List;
  9. import java.util.Map;
  10. import java.util.logging.Level;
  11. import java.util.logging.Logger;
  12.  
  13. import org.bukkit.Bukkit;
  14. import org.bukkit.configuration.file.FileConfiguration;
  15. import org.bukkit.configuration.file.YamlConfiguration;
  16. import org.bukkit.entity.HumanEntity;
  17. import org.bukkit.event.EventHandler;
  18. import org.bukkit.event.Listener;
  19. import org.bukkit.event.inventory.InventoryClickEvent;
  20. import org.bukkit.event.inventory.InventoryType;
  21. import org.bukkit.event.inventory.InventoryType.SlotType;
  22. import org.bukkit.inventory.FurnaceRecipe;
  23. import org.bukkit.inventory.ItemStack;
  24. import org.bukkit.inventory.Recipe;
  25. import org.bukkit.inventory.ShapedRecipe;
  26. import org.bukkit.inventory.ShapelessRecipe;
  27. import org.bukkit.plugin.java.JavaPlugin;
  28.  
  29. public class UnCrafter extends JavaPlugin implements Listener{
  30.     public static UnCrafter plugin;
  31.     public final Logger logger = Logger.getLogger("Uncrafter Initialized");
  32.  
  33.     public void onEnable(){
  34.         getServer().getPluginManager().registerEvents(this, this);
  35.  
  36.         getSaveData().options().copyDefaults(true);
  37.         saveSaveData();
  38.        
  39.        
  40.        
  41.     }
  42.     @EventHandler
  43.     public void onClickRegister(InventoryClickEvent e){
  44.         Bukkit.broadcastMessage(String.valueOf(e.getSlot()));
  45.         Bukkit.broadcastMessage(String.valueOf(e.getSlotType()));
  46.         Bukkit.broadcastMessage(String.valueOf(e.getRawSlot()));
  47.         if(e.getClickedInventory().getType().equals(InventoryType.CRAFTING) && e.getSlotType().equals(SlotType.RESULT))
  48.             onCraftingClick(e);
  49.         ItemStack item;
  50.         if(e.getCurrentItem() !=null)
  51.             item = e.getCurrentItem();
  52.         else if(e.getCursor() != null)
  53.             item = e.getCursor();
  54.         else
  55.             return;
  56.         String name = item.getType().toString();
  57.        
  58.         reloadSaveData();
  59.         if(getSaveData().contains("Registered_UnCrafting_Recipes."+name))
  60.             return;
  61.         if(getSaveData().contains("Registered_UnCrafting_Recipes."+name+".enabled"))
  62.             return;
  63.        
  64.         List<Recipe> recipes = Bukkit.getServer().getRecipesFor(item);
  65.        
  66.         for(int c = 0; c<recipes.size();c++){
  67.             if(recipes.get(c) instanceof ShapedRecipe){
  68.                 ShapedRecipe recipe = (ShapedRecipe) recipes.get(c);
  69.                 logger.info("Registering Shaped UnCrafting Recipe for " + name);
  70.                 registerShapedUnCraftingRecipe(item, recipe, name, c);
  71.                 logger.info("Registered Shaped UnCrafting Recipe for " + name);
  72.                 return;
  73.             }
  74.             else if(recipes.get(c) instanceof ShapelessRecipe){
  75.                 ShapelessRecipe recipe = (ShapelessRecipe) recipes.get(c);
  76.                 logger.info("Registering Shapeless UnCrafting Recipe for " + name);
  77.                 registerShapelessUnCraftingRecipe(item, recipe, name, c);
  78.                 logger.info("Registered Shapeless UnCrafting Recipe for " + name);
  79.             }
  80.             else if(recipes.get(c) instanceof FurnaceRecipe){
  81.                 FurnaceRecipe recipe = (FurnaceRecipe) recipes.get(c);
  82.                 logger.info("Registering UnSmelting Recipe for " + name);
  83.                 registerUnSmeltingRecipe(item, recipe, name, c);
  84.                 logger.info("Registered UnSmelting UnCrafting Recipe for " + name);
  85.             }
  86.             else{
  87.                 logger.severe("If modded server, ignore (unless there are errors).\n Otherwise: REPORT THE FOLLOWING TEXT TO THE AUTHOR OF THIS PLUGIN: stormtrooper28\n"+recipes.get(c).toString());
  88.             }
  89.         }
  90.        
  91.        
  92.        
  93.        
  94.        
  95.     }
  96.        
  97.     private void registerShapedUnCraftingRecipe(ItemStack result, ShapedRecipe recipe, String name, int way){
  98.         reloadSaveData();
  99.        
  100.         Map<Character, ItemStack> ingreMap = recipe.getIngredientMap(); //IngredientMap
  101.         for(ItemStack i : ingreMap.values())
  102.             if(i.getType().equals(result.getType())) //Stop infinite looping glitch, right now
  103.                 return;
  104.        
  105.         int c = 0;
  106.         for(ItemStack i : ingreMap.values()){
  107.             if(i.getType().equals(result.getType()))
  108.                 return;
  109.             getSaveData().set("Registered_UnCrafting_Recipes."+name+".way"+way+"."+c, i.getType().toString());
  110.             c++;
  111.         }
  112.         getSaveData().set("Registered_UnCrafting_Recipes."+name+".way"+way+"."+"._type", "shaped");
  113.        
  114.         saveSaveData();
  115.     }
  116.    
  117.     private void registerShapelessUnCraftingRecipe(ItemStack result, ShapelessRecipe recipe, String name, int way){
  118.         reloadSaveData();
  119.        
  120.         List<ItemStack> ingreList = recipe.getIngredientList();
  121.         for(ItemStack i : ingreList)
  122.             if(i.getType().equals(result.getType()))
  123.                 return;
  124.        
  125.         int c = 0;
  126.         for(ItemStack i : ingreList){
  127.             getSaveData().set("Registered_UnCrafting_Recipes."+name+".way"+way+"."+"."+c, i.getType().toString());
  128.             c++;
  129.         }
  130.         getSaveData().set("Registered_UnCrafting_Recipes."+name+".way"+way+"."+"._type", "shapeless");
  131.        
  132.         saveSaveData();
  133.     }
  134.    
  135.     private void registerUnSmeltingRecipe(ItemStack result, FurnaceRecipe recipe, String name, int way){
  136.         reloadSaveData();
  137.        
  138.         if(recipe.getResult().getType().equals(recipe.getInput().getType()))
  139.             return;
  140.  
  141.         getSaveData().set("Registered_UnCrafting_Recipes."+name+".way"+way+".", recipe.getInput().getType().toString());
  142.         getSaveData().set("Registered_UnCrafting_Recipes."+name+".way"+way+"."+"._type", "furnace");
  143.        
  144.         saveSaveData();
  145.     }
  146.    
  147.    
  148.    
  149.     public void onCraftingClick(InventoryClickEvent e){
  150.         if(e.getClickedInventory().getHolder() instanceof HumanEntity)
  151.             return;
  152.         Bukkit.broadcastMessage("Crafting inv && isResultSlot");
  153.     }
  154.    
  155.    
  156.    
  157.     // CUSTOM CONFIGS!!!!
  158.     // CUSTOM CONFIGS!!!!
  159.     // | | | | CUSTOM CONFIGS!!!! | | | | | | | | | | | |
  160.     // CUSTOM CONFIGS!!!!
  161.     // CUSTOM CONFIGS!!!!
  162.  
  163.     private FileConfiguration SaveData = null;
  164.     private File SaveDataFile = null;
  165.  
  166.     public void reloadSaveData() {
  167.         if (SaveDataFile == null) {
  168.             SaveDataFile = new File(getDataFolder(), "SaveData.yml");
  169.         }
  170.         SaveData = YamlConfiguration.loadConfiguration(SaveDataFile);
  171.  
  172.         Reader defConfigStream = null;
  173.         // Look for defaults in the jar
  174.         try {
  175.             defConfigStream = new InputStreamReader(
  176.                     this.getResource("SaveData.yml"), "UTF8");
  177.         } catch (UnsupportedEncodingException e) {
  178.             // TODO Auto-generated catch block
  179.             e.printStackTrace();
  180.         }
  181.         if (defConfigStream != null) {
  182.             YamlConfiguration defConfig = YamlConfiguration
  183.                     .loadConfiguration(defConfigStream);
  184.             SaveData.setDefaults(defConfig);
  185.         }
  186.     }
  187.  
  188.     // read the config (highscores for most, current games for chess/other &
  189.     // progress)
  190.     public FileConfiguration getSaveData() {
  191.         if (SaveData == null) {
  192.             reloadSaveData();
  193.         }
  194.         return SaveData;
  195.     }
  196.  
  197.     // save the file
  198.     public void saveSaveData() {
  199.         if (SaveData == null || SaveDataFile == null) {
  200.             return;
  201.         }
  202.         try {
  203.             getSaveData().save(SaveDataFile);
  204.         } catch (IOException ex) {
  205.             getLogger().log(Level.SEVERE,
  206.                     "Could not save config to " + SaveDataFile, ex);
  207.         }
  208.     }
  209.  
  210.     // implement backup with following
  211.     public void saveDefaultSaveData() {
  212.         if (SaveDataFile == null) {
  213.             SaveDataFile = new File(plugin.getDataFolder(), "SaveData.yml");
  214.         }
  215.         if (!SaveDataFile.exists()) {
  216.             plugin.saveResource("SaveData.yml", false);
  217.         }
  218.     }
  219.    
  220. }
Advertisement
Add Comment
Please, Sign In to add comment