commit
75790cb620
@ -0,0 +1,4 @@ |
|||||||
|
.classpath |
||||||
|
.project |
||||||
|
.settings |
||||||
|
bin/ |
@ -0,0 +1,8 @@ |
|||||||
|
main: scramble.plugin.Template |
||||||
|
name: MCRandomizer |
||||||
|
author: sig |
||||||
|
version: 1.0.0 |
||||||
|
api-version: 1.13 |
||||||
|
commands: |
||||||
|
block: |
||||||
|
description: Check a block's data. |
@ -0,0 +1,9 @@ |
|||||||
|
# Creepinson's Spigot Plugin Template for Complete Beginners |
||||||
|
**Thank you for using my plugin template! It is free to use in any of your plugins, just please credit me. That's all I request.** |
||||||
|
*This template includes an example command, and an example event listener.* |
||||||
|
*This template also includes a few utilities made both by me, and some other programmers out there.* |
||||||
|
## Usage |
||||||
|
I am also providing a link to get Spigot's buildtools here: |
||||||
|
https://www.spigotmc.org/wiki/buildtools |
||||||
|
|
||||||
|
|
@ -0,0 +1,9 @@ |
|||||||
|
package scramble.plugin; |
||||||
|
|
||||||
|
import org.bukkit.inventory.Recipe; |
||||||
|
|
||||||
|
public interface RecipeStore { |
||||||
|
public void setResultItem(String item); |
||||||
|
public void createRecipe(); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,46 @@ |
|||||||
|
package scramble.plugin; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Arrays; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import org.bukkit.Bukkit; |
||||||
|
import org.bukkit.Material; |
||||||
|
import org.bukkit.inventory.ItemStack; |
||||||
|
import org.bukkit.inventory.RecipeChoice; |
||||||
|
import org.bukkit.inventory.RecipeChoice.MaterialChoice; |
||||||
|
import org.bukkit.inventory.ShapedRecipe; |
||||||
|
import org.bukkit.inventory.ShapelessRecipe; |
||||||
|
|
||||||
|
public class ShapedRecipeStore implements RecipeStore{ |
||||||
|
public String finalItem; |
||||||
|
public String[] shape; |
||||||
|
public HashMap<Character,MaterialChoice> ingredientsMap = new HashMap<Character,MaterialChoice>(); |
||||||
|
|
||||||
|
public ShapedRecipeStore(String[] shape) { |
||||||
|
this.shape=shape; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void createRecipe() { |
||||||
|
ShapedRecipe sr = new ShapedRecipe(new ItemStack(Material.getMaterial(finalItem))); |
||||||
|
sr.shape(shape); |
||||||
|
for (Character c : ingredientsMap.keySet()) { |
||||||
|
MaterialChoice m = ingredientsMap.get(c); |
||||||
|
if (m==null) { |
||||||
|
sr.setIngredient(c, Material.AIR); |
||||||
|
} else { |
||||||
|
sr.setIngredient(c, m); |
||||||
|
} |
||||||
|
} |
||||||
|
Bukkit.getLogger().info("Added recipe for "+finalItem); |
||||||
|
Bukkit.addRecipe(sr); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setResultItem(String item) { |
||||||
|
this.finalItem=item; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,31 @@ |
|||||||
|
package scramble.plugin; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import org.bukkit.Bukkit; |
||||||
|
import org.bukkit.Material; |
||||||
|
import org.bukkit.inventory.ItemStack; |
||||||
|
import org.bukkit.inventory.ShapelessRecipe; |
||||||
|
|
||||||
|
public class ShapelessRecipeStore implements RecipeStore{ |
||||||
|
public List<String> craftingitems = new ArrayList<String>(); |
||||||
|
public String finalItem; |
||||||
|
|
||||||
|
@Override |
||||||
|
public void createRecipe() { |
||||||
|
ShapelessRecipe sr = new ShapelessRecipe(new ItemStack(Material.getMaterial(finalItem))); |
||||||
|
for (int i=0;i<craftingitems.size();i++) { |
||||||
|
sr.addIngredient(Material.getMaterial(craftingitems.get(i))); |
||||||
|
Bukkit.getLogger().info(" Added ingredient "+craftingitems.get(i)); |
||||||
|
} |
||||||
|
Bukkit.getLogger().info("Added recipe for "+finalItem); |
||||||
|
Bukkit.addRecipe(sr); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setResultItem(String item) { |
||||||
|
this.finalItem=item; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,282 @@ |
|||||||
|
package scramble.plugin; |
||||||
|
|
||||||
|
import java.io.BufferedReader; |
||||||
|
import java.io.File; |
||||||
|
import java.io.FileNotFoundException; |
||||||
|
import java.io.FileReader; |
||||||
|
import java.io.IOException; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Arrays; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Iterator; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
import java.util.Random; |
||||||
|
import java.util.logging.Logger; |
||||||
|
import net.md_5.bungee.api.ChatColor; |
||||||
|
import org.bukkit.Bukkit; |
||||||
|
import org.bukkit.Material; |
||||||
|
import org.bukkit.Server; |
||||||
|
import org.bukkit.World; |
||||||
|
import org.bukkit.command.PluginCommand; |
||||||
|
import org.bukkit.inventory.BlastingRecipe; |
||||||
|
import org.bukkit.inventory.CampfireRecipe; |
||||||
|
import org.bukkit.inventory.FurnaceRecipe; |
||||||
|
import org.bukkit.inventory.ItemStack; |
||||||
|
import org.bukkit.inventory.MerchantRecipe; |
||||||
|
import org.bukkit.inventory.Recipe; |
||||||
|
import org.bukkit.inventory.RecipeChoice; |
||||||
|
import org.bukkit.inventory.RecipeChoice.MaterialChoice; |
||||||
|
import org.bukkit.inventory.ShapedRecipe; |
||||||
|
import org.bukkit.inventory.ShapelessRecipe; |
||||||
|
import org.bukkit.inventory.SmokingRecipe; |
||||||
|
import org.bukkit.inventory.StonecuttingRecipe; |
||||||
|
import org.bukkit.plugin.PluginDescriptionFile; |
||||||
|
import org.bukkit.plugin.PluginManager; |
||||||
|
import org.bukkit.plugin.java.JavaPlugin; |
||||||
|
import scramble.plugin.command.ExampleCommand; |
||||||
|
import scramble.plugin.listener.ExampleListener; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public class Template |
||||||
|
extends JavaPlugin |
||||||
|
{ |
||||||
|
public static final String CHAT_PREFIX = ChatColor.AQUA + "Scrambled Recipes"; |
||||||
|
|
||||||
|
private static Template plugin; |
||||||
|
|
||||||
|
public static List<String> craftingrecipes; |
||||||
|
|
||||||
|
public static List<String> smeltingrecipes; |
||||||
|
|
||||||
|
public static List<RecipeStore> recipeStorage; |
||||||
|
public static List<String> shufflelist; |
||||||
|
public static List<ItemStack> shufflelist2; |
||||||
|
public static boolean enableRecipeModifications = false; |
||||||
|
|
||||||
|
PluginDescriptionFile pdfFile; |
||||||
|
|
||||||
|
public static Random r; |
||||||
|
|
||||||
|
public static Template getPlugin() |
||||||
|
{ |
||||||
|
return plugin; |
||||||
|
} |
||||||
|
|
||||||
|
public static void ReadRecipeData() { |
||||||
|
if (!enableRecipeModifications) { |
||||||
|
File f = new File("recipe_data"); |
||||||
|
ReadIntoList(f, craftingrecipes); |
||||||
|
File f2 = new File("furnace_data"); |
||||||
|
ReadIntoList(f2, smeltingrecipes); |
||||||
|
plugin.getLogger().info("Loaded " + craftingrecipes.size() + " crafting entries, " + smeltingrecipes.size() + " furnace entries."); |
||||||
|
String shape; |
||||||
|
for (String s : craftingrecipes) |
||||||
|
{ |
||||||
|
String temp = s.substring(0, s.indexOf(",")); |
||||||
|
s = s.substring(s.indexOf(",") + 1); |
||||||
|
switch (temp) { |
||||||
|
case "0": |
||||||
|
{ |
||||||
|
String[] split = s.replace(" ", "").split(","); |
||||||
|
ShapelessRecipeStore srs = new ShapelessRecipeStore(); |
||||||
|
for (int i = 0; i < split.length - 1; i++) { |
||||||
|
srs.craftingitems.add(split[i]); |
||||||
|
} |
||||||
|
recipeStorage.add(srs); |
||||||
|
shufflelist.add(split[(split.length - 1)]); |
||||||
|
}break; |
||||||
|
case "1":{ |
||||||
|
shape = s.substring(s.indexOf('[') + 1, s.indexOf(']')); |
||||||
|
String[] shape_split = shape.replace(" ", "").split(","); |
||||||
|
s = s.substring(s.indexOf(']') + 1); |
||||||
|
String itemsList = s.substring(s.indexOf('[') + 1, s.lastIndexOf(']')); |
||||||
|
|
||||||
|
String[] itemsSplit = itemsList.replace(" ", "").split("\\]\\["); |
||||||
|
|
||||||
|
ShapedRecipeStore srs = new ShapedRecipeStore(shape_split); |
||||||
|
for (String s2 : itemsSplit) { |
||||||
|
String[] splitter = s2.split(","); |
||||||
|
|
||||||
|
|
||||||
|
List<Material> splitter2 = new ArrayList(); |
||||||
|
for (int i = 1; i < splitter.length; i++) { |
||||||
|
Material m = Material.getMaterial(splitter[i]); |
||||||
|
|
||||||
|
if (m != null) { |
||||||
|
splitter2.add(m); |
||||||
|
} |
||||||
|
else { |
||||||
|
splitter2.add(Material.AIR); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
srs.ingredientsMap.put(Character.valueOf(splitter[0].charAt(0)), new RecipeChoice.MaterialChoice(splitter2)); |
||||||
|
} |
||||||
|
recipeStorage.add(srs); |
||||||
|
s = s.substring(s.lastIndexOf(',') + 1); |
||||||
|
shufflelist.add(s); |
||||||
|
} |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
plugin.getLogger().info("There are " + recipeStorage.size() + " recipes and " + shufflelist.size() + " shuffle items."); |
||||||
|
if (recipeStorage.size() != shufflelist.size()) { |
||||||
|
plugin.getLogger().severe("Recipe storage and Shuffle list sizes DO NOT MATCH. Exiting here..."); |
||||||
|
Bukkit.shutdown(); |
||||||
|
} |
||||||
|
|
||||||
|
plugin.getLogger().info("Creating recipes..."); |
||||||
|
while (shufflelist.size() > 0) |
||||||
|
{ |
||||||
|
Integer numb = Integer.valueOf(r.nextInt(recipeStorage.size())); |
||||||
|
RecipeStore rs = (RecipeStore)recipeStorage.get(numb.intValue()); |
||||||
|
rs.setResultItem((String)shufflelist.get(0)); |
||||||
|
if ((rs instanceof ShapedRecipeStore)) { |
||||||
|
ShapedRecipeStore rss = (ShapedRecipeStore)rs; |
||||||
|
Bukkit.getLogger().info(Arrays.toString(rss.shape)); |
||||||
|
for (Character c : rss.ingredientsMap.keySet()) { |
||||||
|
Bukkit.getLogger().info(" " + c + ": " + rss.ingredientsMap.get(c)); |
||||||
|
} |
||||||
|
} |
||||||
|
rs.createRecipe(); |
||||||
|
shufflelist.remove(0); |
||||||
|
recipeStorage.remove(rs); |
||||||
|
} |
||||||
|
plugin.getLogger().info("Done! All recipes shuffled!"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private static void ReadIntoList(File f, List<String> list) |
||||||
|
{ |
||||||
|
try { |
||||||
|
FileReader fr = new FileReader(f); |
||||||
|
BufferedReader br = new BufferedReader(fr); |
||||||
|
String s = br.readLine(); |
||||||
|
while (s != null) { |
||||||
|
list.add(s); |
||||||
|
s = br.readLine(); |
||||||
|
} |
||||||
|
br.close(); |
||||||
|
fr.close(); |
||||||
|
} catch (FileNotFoundException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} catch (IOException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void AddInDefaultRecipes() { |
||||||
|
ShapedRecipe sr = new ShapedRecipe(new ItemStack(Material.CRAFTING_TABLE)); |
||||||
|
sr.shape(new String[]{"aa","aa"}); |
||||||
|
sr.setIngredient('a', new RecipeChoice.MaterialChoice(new Material[]{ |
||||||
|
Material.ACACIA_PLANKS, |
||||||
|
Material.BIRCH_PLANKS, |
||||||
|
Material.DARK_OAK_PLANKS, |
||||||
|
Material.JUNGLE_PLANKS, |
||||||
|
Material.OAK_PLANKS, |
||||||
|
Material.SPRUCE_PLANKS, |
||||||
|
})); |
||||||
|
Bukkit.addRecipe(sr); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void onEnable() |
||||||
|
{ |
||||||
|
craftingrecipes = new ArrayList(); |
||||||
|
smeltingrecipes = new ArrayList(); |
||||||
|
shufflelist = new ArrayList(); |
||||||
|
shufflelist2 = new ArrayList(); |
||||||
|
recipeStorage = new ArrayList(); |
||||||
|
plugin = (Template)getPlugin(Template.class); |
||||||
|
r = new Random(Bukkit.getWorld("world").getSeed()); |
||||||
|
List<Recipe> defaultRecipes = new ArrayList(); |
||||||
|
Iterator<Recipe> it = Bukkit.recipeIterator(); |
||||||
|
while (it.hasNext()) { |
||||||
|
Recipe r = (Recipe)it.next(); |
||||||
|
defaultRecipes.add(r); |
||||||
|
shufflelist2.add(r.getResult()); |
||||||
|
Bukkit.getLogger().info("Found a recipe for " + r.getResult()); |
||||||
|
} |
||||||
|
Bukkit.clearRecipes(); |
||||||
|
HashMap<String, Integer> recipeTypeMap = new HashMap(); |
||||||
|
|
||||||
|
while (shufflelist2.size() > 0) { |
||||||
|
Recipe rr = (Recipe)defaultRecipes.get(r.nextInt(defaultRecipes.size())); |
||||||
|
boolean modified=true; |
||||||
|
try { |
||||||
|
if ((rr instanceof BlastingRecipe)) { |
||||||
|
BlastingRecipe br = (BlastingRecipe)rr; |
||||||
|
BlastingRecipe newbr = new BlastingRecipe(br.getKey(), (ItemStack)shufflelist2.get(0), br.getInputChoice(), br.getExperience(), br.getCookingTime()); |
||||||
|
Bukkit.addRecipe(newbr); |
||||||
|
} |
||||||
|
else if ((rr instanceof CampfireRecipe)) { |
||||||
|
CampfireRecipe br = (CampfireRecipe)rr; |
||||||
|
CampfireRecipe newbr = new CampfireRecipe(br.getKey(), (ItemStack)shufflelist2.get(0), br.getInputChoice(), br.getExperience(), br.getCookingTime()); |
||||||
|
Bukkit.addRecipe(newbr); |
||||||
|
} |
||||||
|
/*else if ((rr instanceof FurnaceRecipe)) { |
||||||
|
FurnaceRecipe br = (FurnaceRecipe)rr; |
||||||
|
FurnaceRecipe newbr = new FurnaceRecipe(br.getKey(), (ItemStack)shufflelist2.get(0), br.getInputChoice(), br.getExperience(), br.getCookingTime()); |
||||||
|
Bukkit.addRecipe(newbr); |
||||||
|
}*/ |
||||||
|
else if ((rr instanceof MerchantRecipe)) { |
||||||
|
MerchantRecipe br = (MerchantRecipe)rr; |
||||||
|
MerchantRecipe newbr = new MerchantRecipe((ItemStack)shufflelist2.get(0), br.getUses(), br.getMaxUses(), true, br.getVillagerExperience(), br.getPriceMultiplier()); |
||||||
|
Bukkit.addRecipe(newbr); |
||||||
|
} |
||||||
|
/*else if ((rr instanceof ShapedRecipe)) { |
||||||
|
ShapedRecipe br = (ShapedRecipe)rr; |
||||||
|
ShapedRecipe newbr = new ShapedRecipe((ItemStack)shufflelist2.get(0)); |
||||||
|
newbr.shape(br.getShape()); |
||||||
|
|
||||||
|
for (Character c : br.getChoiceMap().keySet()) |
||||||
|
{ |
||||||
|
newbr.setIngredient(c.charValue(), (RecipeChoice)br.getChoiceMap().get(c)); |
||||||
|
} |
||||||
|
Bukkit.addRecipe(newbr); |
||||||
|
} |
||||||
|
else if ((rr instanceof ShapelessRecipe)) { |
||||||
|
ShapelessRecipe br = (ShapelessRecipe)rr; |
||||||
|
ShapelessRecipe newbr = new ShapelessRecipe((ItemStack)shufflelist2.get(0)); |
||||||
|
for (ItemStack i : br.getIngredientList()) { |
||||||
|
newbr.addIngredient(i.getType()); |
||||||
|
} |
||||||
|
Bukkit.addRecipe(newbr); |
||||||
|
}*/ |
||||||
|
else if ((rr instanceof SmokingRecipe)) { |
||||||
|
SmokingRecipe br = (SmokingRecipe)rr; |
||||||
|
SmokingRecipe newbr = new SmokingRecipe(br.getKey(), (ItemStack)shufflelist2.get(0), br.getInputChoice(), br.getExperience(), br.getCookingTime()); |
||||||
|
Bukkit.addRecipe(newbr); |
||||||
|
} |
||||||
|
else if ((rr instanceof StonecuttingRecipe)) { |
||||||
|
StonecuttingRecipe br = (StonecuttingRecipe)rr; |
||||||
|
StonecuttingRecipe newbr = new StonecuttingRecipe(br.getKey(), (ItemStack)shufflelist2.get(0), br.getInputChoice()); |
||||||
|
Bukkit.addRecipe(newbr); |
||||||
|
} else { |
||||||
|
modified=false; |
||||||
|
} |
||||||
|
} |
||||||
|
catch (IllegalStateException localIllegalStateException) {} |
||||||
|
|
||||||
|
if (modified) { |
||||||
|
recipeTypeMap.put(rr.getClass().getName(), Integer.valueOf(recipeTypeMap.containsKey(rr.getClass().getName()) ? ((Integer)recipeTypeMap.get(rr.getClass().getName())).intValue() + 1 : 1)); |
||||||
|
} |
||||||
|
shufflelist2.remove(0); |
||||||
|
} |
||||||
|
ReadRecipeData(); |
||||||
|
AddInDefaultRecipes(); |
||||||
|
|
||||||
|
for (String s : recipeTypeMap.keySet()) { |
||||||
|
Bukkit.getLogger().info(" Randomized " + recipeTypeMap.get(s) + " " + s + " recipes."); |
||||||
|
} |
||||||
|
|
||||||
|
PluginManager pm = getServer().getPluginManager(); |
||||||
|
|
||||||
|
getCommand("block").setExecutor(new ExampleCommand()); |
||||||
|
|
||||||
|
pm.registerEvents(new ExampleListener(), this); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,54 @@ |
|||||||
|
package scramble.plugin.command; |
||||||
|
|
||||||
|
import static scramble.plugin.Template.CHAT_PREFIX; |
||||||
|
|
||||||
|
import org.bukkit.command.Command; |
||||||
|
import org.bukkit.command.CommandExecutor; |
||||||
|
import org.bukkit.command.CommandSender; |
||||||
|
import org.bukkit.command.ConsoleCommandSender; |
||||||
|
import org.bukkit.entity.Player; |
||||||
|
import org.bukkit.inventory.ItemStack; |
||||||
|
import org.bukkit.inventory.meta.BlockDataMeta; |
||||||
|
|
||||||
|
import net.md_5.bungee.api.ChatColor; |
||||||
|
import scramble.plugin.Template; |
||||||
|
|
||||||
|
// All command classes need to implement the CommandExecutor interface to be a proper command!
|
||||||
|
public class ExampleCommand implements CommandExecutor { |
||||||
|
|
||||||
|
/* Called when the command is ran |
||||||
|
args variable is the commands arguments in an array of strings. |
||||||
|
sender variable is the sender who ran the command |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public boolean onCommand(CommandSender sender, Command cmd, String cmdLabel, String[] args) { |
||||||
|
|
||||||
|
/* Checks if the sender is sending from the console |
||||||
|
CHAT_PREFIX is the variable from the Template plugin class and can be removed |
||||||
|
if unwanted. |
||||||
|
*/ |
||||||
|
if (!(sender instanceof Player)) { |
||||||
|
sender.sendMessage(CHAT_PREFIX + ChatColor.WHITE + " > " + ChatColor.RED + "You cannot run this command from the console!"); |
||||||
|
return false; |
||||||
|
} |
||||||
|
/* |
||||||
|
* Since we made sure the sender is a player, we can create a new player |
||||||
|
* variable using our sender |
||||||
|
*/ |
||||||
|
Player p = (Player) sender; |
||||||
|
|
||||||
|
/* |
||||||
|
* checks if First argument (/command FIRSTARGUMENT) is equal to the string In |
||||||
|
* this case, the command would be: /example sayhi |
||||||
|
*/ |
||||||
|
if (cmd.getName().equalsIgnoreCase("block")) { |
||||||
|
if (p.getInventory().getItemInMainHand()!=null) { |
||||||
|
ItemStack it = p.getInventory().getItemInMainHand(); |
||||||
|
p.sendMessage(it.toString()); |
||||||
|
} |
||||||
|
return true; |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,133 @@ |
|||||||
|
package scramble.plugin.listener; |
||||||
|
|
||||||
|
import java.io.File; |
||||||
|
import java.io.FileWriter; |
||||||
|
import java.io.IOException; |
||||||
|
import java.util.Arrays; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import org.bukkit.Bukkit; |
||||||
|
import org.bukkit.Material; |
||||||
|
import org.bukkit.entity.Player; |
||||||
|
import org.bukkit.event.EventHandler; |
||||||
|
import org.bukkit.event.Listener; |
||||||
|
import org.bukkit.event.block.BlockBreakEvent; |
||||||
|
import org.bukkit.event.inventory.CraftItemEvent; |
||||||
|
import org.bukkit.event.inventory.FurnaceSmeltEvent; |
||||||
|
import org.bukkit.event.inventory.PrepareItemCraftEvent; |
||||||
|
import org.bukkit.inventory.ItemStack; |
||||||
|
import org.bukkit.inventory.Recipe; |
||||||
|
import org.bukkit.inventory.RecipeChoice; |
||||||
|
import org.bukkit.inventory.ShapedRecipe; |
||||||
|
import org.bukkit.inventory.ShapelessRecipe; |
||||||
|
|
||||||
|
import net.md_5.bungee.api.ChatColor; |
||||||
|
import scramble.plugin.Template; |
||||||
|
|
||||||
|
public class ExampleListener implements Listener { |
||||||
|
|
||||||
|
@EventHandler |
||||||
|
public void onBlockBreak(BlockBreakEvent event) { |
||||||
|
/* |
||||||
|
* We get the player and make a variable to make it easier to access it when we |
||||||
|
* need to use it. |
||||||
|
*/ |
||||||
|
//Player p = event.getPlayer();
|
||||||
|
/* |
||||||
|
* Here we cancel the event. This means that they can't break the block. In this |
||||||
|
* case, we send a message to the player saying they don't have the required |
||||||
|
* permission. |
||||||
|
*/ |
||||||
|
/*if (!p.hasPermission("template.breakblocks")) { |
||||||
|
p.sendMessage(Template.CHAT_PREFIX + ChatColor.WHITE + " > " + ChatColor.RED + "You do not have permission to break blocks!"); |
||||||
|
event.setCancelled(true); |
||||||
|
}*/ |
||||||
|
} |
||||||
|
|
||||||
|
@EventHandler |
||||||
|
public void onCraftItemEvent(CraftItemEvent ev) { |
||||||
|
/*for (in |
||||||
|
//ev.getViewers().get(0).sendMessagt i=0;i<9;i++) {
|
||||||
|
//ev.getViewers().get(0).sendMessage(ev.getInventory().getItem(0).getData().toString());
|
||||||
|
}*/ |
||||||
|
//ev.getInventory().getSize()
|
||||||
|
|
||||||
|
if (Template.enableRecipeModifications) { |
||||||
|
Recipe rec = ev.getRecipe(); |
||||||
|
if (rec instanceof ShapelessRecipe) { |
||||||
|
StringBuilder sb = new StringBuilder("0"); |
||||||
|
ShapelessRecipe rec2 = (ShapelessRecipe)rec; |
||||||
|
for (int i=0;i<rec2.getIngredientList().size();i++) { |
||||||
|
//ev.getViewers().get(0).sendMessage(rec2.getIngredientList().get(i).getData().toString());
|
||||||
|
sb.append(","+getCutItemStackData(rec2.getIngredientList().get(i))); |
||||||
|
} |
||||||
|
sb.append(","+getCutItemStackData(rec2.getResult())); |
||||||
|
SaveData(ev, sb); |
||||||
|
} |
||||||
|
if (rec instanceof ShapedRecipe) { |
||||||
|
ShapedRecipe rec2 = (ShapedRecipe)rec; |
||||||
|
Map<Character,RecipeChoice> map1 = rec2.getChoiceMap(); |
||||||
|
Map<Character,ItemStack> map2 = rec2.getIngredientMap(); |
||||||
|
StringBuilder sb = new StringBuilder("1"); |
||||||
|
//ev.getViewers().get(0).sendMessage(Arrays.toString(rec2.getShape()));
|
||||||
|
sb.append(","+Arrays.toString(rec2.getShape())); |
||||||
|
for (Character c : map1.keySet()) { |
||||||
|
//ItemStack it = map2.get(c).;
|
||||||
|
sb.append("["+c+","+getCutChoices(map1.get(c))+"]"); |
||||||
|
//ev.getViewers().get(0).sendMessage(c+","+map1.get(c));
|
||||||
|
//ev.getViewers().get(0).sendMessage(rec2.getIngredientList().get(i).getData().toString());
|
||||||
|
} |
||||||
|
sb.append(","+getCutItemStackData(rec2.getResult())); |
||||||
|
SaveData(ev, sb); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@EventHandler |
||||||
|
public void onSmeltItemEvent(FurnaceSmeltEvent ev) { |
||||||
|
if (Template.enableRecipeModifications) { |
||||||
|
Player p = Bukkit.getPlayer("sigonasr2"); |
||||||
|
if (p!=null && p.isOnline()) { |
||||||
|
StringBuilder sb = new StringBuilder(getCutItemStackData(ev.getSource())); |
||||||
|
sb.append(","+getCutItemStackData(ev.getResult())); |
||||||
|
Template.smeltingrecipes.add(sb.toString()); |
||||||
|
p.sendMessage("Item["+Template.smeltingrecipes.size()+"] "+sb.toString()+" added."); |
||||||
|
File f = new File("furnace_data"); |
||||||
|
try{ |
||||||
|
FileWriter fw = new FileWriter(f,true); |
||||||
|
fw.write(sb.toString()+"\n"); |
||||||
|
fw.close(); |
||||||
|
} catch (IOException e) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public String getCutItemStackData(ItemStack it) { |
||||||
|
String s=it.toString().replace("ItemStack{", ""); |
||||||
|
return s.substring(0,s.indexOf(' ')); |
||||||
|
} |
||||||
|
public String getCutChoices(RecipeChoice c) { |
||||||
|
if (c!=null) { |
||||||
|
String s = c.toString().replace("MaterialChoice{choices=[", ""); |
||||||
|
return s.substring(0,s.indexOf(']')); |
||||||
|
} else { |
||||||
|
return "NULL"; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void SaveData(CraftItemEvent ev, StringBuilder sb) { |
||||||
|
Template.craftingrecipes.add(sb.toString()); |
||||||
|
ev.getViewers().get(0).sendMessage("Item["+Template.craftingrecipes.size()+"] " +sb.toString()+" added."); |
||||||
|
|
||||||
|
File f = new File("recipe_data"); |
||||||
|
try { |
||||||
|
FileWriter fw = new FileWriter(f,true); |
||||||
|
fw.write(sb.toString()+"\n"); |
||||||
|
fw.close(); |
||||||
|
} catch (IOException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue