Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package me.knayder.StoneG;
- import org.bukkit.Bukkit;
- import org.bukkit.Location;
- import org.bukkit.Material;
- import org.bukkit.NamespacedKey;
- import org.bukkit.block.Block;
- import org.bukkit.block.Dispenser;
- import org.bukkit.block.data.Directional;
- import org.bukkit.enchantments.Enchantment;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.block.BlockDispenseEvent;
- import org.bukkit.inventory.ItemFlag;
- import org.bukkit.inventory.ItemStack;
- import org.bukkit.inventory.ShapedRecipe;
- import org.bukkit.inventory.meta.ItemMeta;
- import org.bukkit.plugin.Plugin;
- import java.lang.reflect.Array;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- public class CustomGenerator implements Listener {
- @EventHandler
- public void onBlockDispenseEvent(BlockDispenseEvent event) {
- Block block = event.getBlock();
- if ( ! block.getType().equals(Material.DISPENSER))
- return;
- ItemStack item = event.getItem();
- if ( ! item.getType().equals(this.material))
- return;
- if ( ! item.getItemMeta().getDisplayName().equals( this.name ) )
- return;
- Dispenser dispenser = (Dispenser) event.getBlock().getState();
- Bukkit.getScheduler().runTaskLater(StoneG.get(), new Runnable() {
- @Override
- public void run() {
- for (ItemStack it : dispenser.getInventory().getContents()) {
- if(it == null)
- continue;
- if ( ! it.equals(item))
- continue;
- Directional directional = (Directional) dispenser.getBlockData();
- Location loc = block.getLocation();
- loc.add(directional.getFacing().getDirection());
- placeBlock(it, loc);
- /*
- ItemMeta itemMeta = it.getItemMeta();
- int delta = 1337;
- long currentTime = System.currentTimeMillis();
- if (itemMeta.hasCustomModelData()) {
- delta = (int) (currentTime - itemMeta.getCustomModelData());
- }
- if (delta >= 1000) {
- if (loc.getBlock().getType().equals(Material.AIR)) {
- loc.getBlock().setType(Material.COBBLESTONE);
- itemMeta.setCustomModelData((int) currentTime);
- it.setItemMeta(itemMeta);
- }
- }
- */
- break;
- }
- }
- }, 1L);
- event.setCancelled(true);
- }
- private static String removeLetters(String s) {
- s = s.replaceAll("[^\\d.]", "");
- return s;
- }
- private void placeBlock(ItemStack item, Location loc) {
- ItemMeta meta = item.getItemMeta();
- if( ! meta.hasLore())
- return;
- List<String> lore = meta.getLore();
- if( ! (lore.size() > LAST_INDEX))
- return;
- String s = removeLetters(lore.get(USES_INDEX));
- int uses = s.equals("") ? -1 : Integer.parseInt(s);
- if( uses == 0 )
- return;
- int delay = Integer.parseInt(removeLetters(lore.get(DELAY_INDEX)));
- int last = Integer.parseInt(removeLetters(lore.get(LAST_INDEX)));
- int current = (int) System.currentTimeMillis();
- if (current - last >= delay) {
- if (loc.getBlock().getType().equals(Material.AIR)) {
- loc.getBlock().setType(Material.COBBLESTONE);
- lore.set(LAST_INDEX, "Last: " + String.valueOf(current));
- if (uses > 0)
- lore.set(USES_INDEX, "Ilosc uzyc: " + String.valueOf(uses - 1));
- meta.setLore(lore);
- }
- }
- item.setItemMeta(meta);
- }
- /*
- ////////////////////////////
- RECIPE PART BELOW
- ////////////////////////////
- */
- private Plugin plugin;
- private Map<Character, Material> ingredients = new HashMap<>();
- private String a=null, b=null, c=null;
- private String name = null;
- private NamespacedKey namespacedKey = null;
- private Material material = null;
- private Boolean generated = false;
- private int uses = -1;
- private int delay = 0;
- private static int USES_INDEX = 0;
- private static int DELAY_INDEX = 1;
- private static int LAST_INDEX = 2;
- private Boolean warning() {
- if (generated) {
- System.out.println("Cannot change generated ");
- return true;
- }
- return false;
- }
- public static CustomGenerator create(Plugin plugin) {
- CustomGenerator customGenerator = new CustomGenerator();
- customGenerator.plugin = plugin;
- return customGenerator;
- }
- public CustomGenerator setNamespacedKey(String key) {
- if( warning() ) return this;
- namespacedKey = new NamespacedKey(plugin, key);
- return this;
- }
- public CustomGenerator setItemName(String name) {
- if( warning() ) return this;
- this.name = name;
- return this;
- }
- public CustomGenerator setRecipeShape(String a, String b, String c) {
- if( warning() ) return this;
- this.a = a;
- this.b = b;
- this.c = c;
- return this;
- }
- public CustomGenerator setIngredient(char key, Material material) {
- if( warning() ) return this;
- ingredients.put(key, material);
- return this;
- }
- public CustomGenerator setItem(Material type) {
- if( warning() ) return this;
- material = type;
- return this;
- }
- public CustomGenerator setUses(int uses) {
- if( warning() ) return this;
- this.uses = uses;
- return this;
- }
- public CustomGenerator setDelay(int delay) {
- if( warning() ) return this;
- this.delay = delay;
- return this;
- }
- public CustomGenerator generate() {
- generated = true;
- if(name != null && namespacedKey != null && material != null && a != null && b != null && c != null) {
- ItemStack itemStack = new ItemStack(material, 1);
- ItemMeta meta = itemStack.getItemMeta();
- meta.setDisplayName(name);
- meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
- meta.addEnchant(Enchantment.DURABILITY, 1, true);
- ArrayList<String> lore = new ArrayList<String>();
- lore.add("Ilosc uzyc: " + ((uses >= 0)?String.valueOf(uses):"inf") );
- lore.add("Czas regeneracji: " + String.valueOf(delay) + "ms");
- lore.add("Last: 0");
- meta.setLore(lore);
- itemStack.setItemMeta(meta);
- ShapedRecipe recipe = new ShapedRecipe(namespacedKey, itemStack);
- recipe.shape(a, b, c);
- for (Map.Entry<Character, Material> entry : ingredients.entrySet()) {
- recipe.setIngredient(entry.getKey(), entry.getValue());
- }
- plugin.getServer().addRecipe(recipe);
- }
- plugin.getServer().getPluginManager().registerEvents(this, plugin);
- return this;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement