Switched to proper Crafting-mechanics
This commit is contained in:
		
							parent
							
								
									3d757a6ccf
								
							
						
					
					
						commit
						c0917a1ab6
					
				@ -3,7 +3,7 @@ package eu.ruekov.ruakij.LinkedBeaconTeleporters;
 | 
			
		||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.linkedBeaconTeleporter.LinkedBeaconTeleporterManager;
 | 
			
		||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.listener.OnBlockBreak;
 | 
			
		||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.listener.OnBlockPlace;
 | 
			
		||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.listener.OnPrepareItemCraftEvent;
 | 
			
		||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.listener.OnCraftItemEvent;
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.configuration.file.FileConfiguration;
 | 
			
		||||
import org.bukkit.configuration.file.YamlConfiguration;
 | 
			
		||||
@ -33,7 +33,7 @@ public class Main extends JavaPlugin {
 | 
			
		||||
        PluginManager pluginManager = Bukkit.getPluginManager();
 | 
			
		||||
        pluginManager.registerEvents(new OnBlockBreak(), this);
 | 
			
		||||
        pluginManager.registerEvents(new OnBlockPlace(), this);
 | 
			
		||||
        pluginManager.registerEvents(new OnPrepareItemCraftEvent(), this);
 | 
			
		||||
        pluginManager.registerEvents(new OnCraftItemEvent(), this);
 | 
			
		||||
 | 
			
		||||
        loadConfigs();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@ public class LinkedBeaconTeleporterItem extends LinkedBeaconTeleporter {
 | 
			
		||||
        // Create a new LinkedBeaconTeleporter
 | 
			
		||||
        super();
 | 
			
		||||
 | 
			
		||||
        this.item = Main.lbtManager.getItemStackFromLbtItem(this);
 | 
			
		||||
        this.item = Main.lbtManager.getItemStackFromData(this.teleporterId);
 | 
			
		||||
    }
 | 
			
		||||
    public LinkedBeaconTeleporterItem(String teleporterId, ItemStack item) {
 | 
			
		||||
        super(teleporterId);
 | 
			
		||||
@ -27,7 +27,7 @@ public class LinkedBeaconTeleporterItem extends LinkedBeaconTeleporter {
 | 
			
		||||
    public LinkedBeaconTeleporterItem(String teleporterId){
 | 
			
		||||
        super(teleporterId);
 | 
			
		||||
 | 
			
		||||
        this.item = Main.lbtManager.getItemStackFromLbtItem(this);
 | 
			
		||||
        this.item = Main.lbtManager.getItemStackFromData(teleporterId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public ItemStack item(){
 | 
			
		||||
 | 
			
		||||
@ -2,11 +2,14 @@ package eu.ruekov.ruakij.LinkedBeaconTeleporters.linkedBeaconTeleporter;
 | 
			
		||||
 | 
			
		||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.Function;
 | 
			
		||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.Main;
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.Location;
 | 
			
		||||
import org.bukkit.Material;
 | 
			
		||||
import org.bukkit.NamespacedKey;
 | 
			
		||||
import org.bukkit.block.Block;
 | 
			
		||||
import org.bukkit.configuration.ConfigurationSection;
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
import org.bukkit.inventory.ShapelessRecipe;
 | 
			
		||||
import org.bukkit.inventory.meta.ItemMeta;
 | 
			
		||||
 | 
			
		||||
import java.util.*;
 | 
			
		||||
@ -31,6 +34,9 @@ public class LinkedBeaconTeleporterManager {
 | 
			
		||||
                Main.config.getStringList("item.lore")
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        // Construct & add crafting-receipes
 | 
			
		||||
       constructAndAddRecipes();
 | 
			
		||||
 | 
			
		||||
        // Load teleporters
 | 
			
		||||
        for(String teleporterId : Main.data.getKeys(false)){
 | 
			
		||||
            ConfigurationSection teleportersData = Main.data.getConfigurationSection(teleporterId);
 | 
			
		||||
@ -116,8 +122,29 @@ public class LinkedBeaconTeleporterManager {
 | 
			
		||||
        return lbtItem;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void constructAndAddRecipes(){
 | 
			
		||||
        // Create result-item
 | 
			
		||||
        ItemStack item = getItemStackFromData("-");
 | 
			
		||||
        item.setAmount(2);
 | 
			
		||||
 | 
			
		||||
        // Create recipe
 | 
			
		||||
        ShapelessRecipe recipe = new ShapelessRecipe(
 | 
			
		||||
                new NamespacedKey(Main.plugin, "linked_beacon_teleporter")
 | 
			
		||||
                , item);
 | 
			
		||||
        recipe.addIngredient(2, Material.BEACON);
 | 
			
		||||
        Bukkit.addRecipe(recipe);
 | 
			
		||||
 | 
			
		||||
        // Empty recipe to reset beacon
 | 
			
		||||
        ShapelessRecipe recipe2 = new ShapelessRecipe(
 | 
			
		||||
                new NamespacedKey(Main.plugin, "linked_beacon_teleporter_reset"),
 | 
			
		||||
                new ItemStack(Material.BEACON)
 | 
			
		||||
                );
 | 
			
		||||
        recipe2.addIngredient(1, Material.BEACON);
 | 
			
		||||
        Bukkit.addRecipe(recipe2);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Conversion-methods
 | 
			
		||||
    public ItemStack getItemStackFromLbtItem(LinkedBeaconTeleporterItem lbtItem){
 | 
			
		||||
    public ItemStack getItemStackFromData(String teleporterId){
 | 
			
		||||
        ItemStack item = new ItemStack(Material.BEACON);
 | 
			
		||||
        ItemMeta itemMeta = item.getItemMeta();
 | 
			
		||||
 | 
			
		||||
@ -126,10 +153,10 @@ public class LinkedBeaconTeleporterManager {
 | 
			
		||||
        List<String> lore = Main.config.getStringList("item.lore");
 | 
			
		||||
 | 
			
		||||
        // Replace parameters
 | 
			
		||||
        name = name.replace("%id%", lbtItem.teleporterId);
 | 
			
		||||
        name = name.replace("%id%", teleporterId);
 | 
			
		||||
        for(int i=0; i<lore.size(); i++){
 | 
			
		||||
            lore.set(i,
 | 
			
		||||
                    lore.get(i).replace("%id%", lbtItem.teleporterId)
 | 
			
		||||
                    lore.get(i).replace("%id%", teleporterId)
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,27 @@
 | 
			
		||||
package eu.ruekov.ruakij.LinkedBeaconTeleporters.linkedBeaconTeleporter.listener;
 | 
			
		||||
 | 
			
		||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.Main;
 | 
			
		||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.linkedBeaconTeleporter.LinkedBeaconTeleporterItem;
 | 
			
		||||
import org.bukkit.event.EventHandler;
 | 
			
		||||
import org.bukkit.event.EventPriority;
 | 
			
		||||
import org.bukkit.event.Listener;
 | 
			
		||||
import org.bukkit.event.inventory.CraftItemEvent;
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
import org.bukkit.inventory.Recipe;
 | 
			
		||||
 | 
			
		||||
public class OnCraftItemEvent {
 | 
			
		||||
 | 
			
		||||
    public static void onCraftItemEvent(CraftItemEvent e, LinkedBeaconTeleporterItem lbtItem){
 | 
			
		||||
 | 
			
		||||
        // Create new LinkedBeaconTeleporterItem
 | 
			
		||||
        lbtItem = new LinkedBeaconTeleporterItem();
 | 
			
		||||
 | 
			
		||||
        ItemStack item = lbtItem.item();
 | 
			
		||||
        // Exactly 2
 | 
			
		||||
        item.setAmount(2);
 | 
			
		||||
 | 
			
		||||
        // FIXME: Changing the just-crafted-item only works for a single item, bulk-crafting (e.g. Shift-Click) will result in default-items getting crafted!
 | 
			
		||||
 | 
			
		||||
        e.setCurrentItem(item);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,36 +0,0 @@
 | 
			
		||||
package eu.ruekov.ruakij.LinkedBeaconTeleporters.linkedBeaconTeleporter.listener;
 | 
			
		||||
 | 
			
		||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.linkedBeaconTeleporter.LinkedBeaconTeleporterItem;
 | 
			
		||||
import org.bukkit.Material;
 | 
			
		||||
import org.bukkit.event.inventory.PrepareItemCraftEvent;
 | 
			
		||||
import org.bukkit.inventory.CraftingInventory;
 | 
			
		||||
import org.bukkit.inventory.InventoryView;
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
 | 
			
		||||
public class OnPrepareItemCraftEvent {
 | 
			
		||||
 | 
			
		||||
    public static void onPrepareItemCraftEvent(PrepareItemCraftEvent e){
 | 
			
		||||
        ItemStack[] matrix = e.getInventory().getMatrix();
 | 
			
		||||
 | 
			
		||||
        // Check if one of provided items is already LinkedBeaconTeleporterItem and use first if found
 | 
			
		||||
        LinkedBeaconTeleporterItem lbtItem = null;
 | 
			
		||||
 | 
			
		||||
        /*for (ItemStack item : matrix) {
 | 
			
		||||
            if(item == null) continue;
 | 
			
		||||
            lbtItem = LinkedBeaconTeleporterItem.getFromItemStack(item);
 | 
			
		||||
            if(lbtItem != null) break;
 | 
			
		||||
        }*/
 | 
			
		||||
 | 
			
		||||
        if(lbtItem == null){
 | 
			
		||||
            // If none is found, create new LinkedBeaconTeleporterItem and set as crafting-result
 | 
			
		||||
            lbtItem = new LinkedBeaconTeleporterItem();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ItemStack item = lbtItem.item();
 | 
			
		||||
        // Exactly 2
 | 
			
		||||
        item.setAmount(2);
 | 
			
		||||
 | 
			
		||||
        // Set as crafting-result
 | 
			
		||||
        e.getInventory().setResult(item);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,29 @@
 | 
			
		||||
package eu.ruekov.ruakij.LinkedBeaconTeleporters.listener;
 | 
			
		||||
 | 
			
		||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.Main;
 | 
			
		||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.linkedBeaconTeleporter.LinkedBeaconTeleporterItem;
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.Material;
 | 
			
		||||
import org.bukkit.event.EventHandler;
 | 
			
		||||
import org.bukkit.event.EventPriority;
 | 
			
		||||
import org.bukkit.event.Listener;
 | 
			
		||||
import org.bukkit.event.inventory.CraftItemEvent;
 | 
			
		||||
import org.bukkit.event.inventory.PrepareItemCraftEvent;
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
import org.bukkit.inventory.Recipe;
 | 
			
		||||
 | 
			
		||||
public class OnCraftItemEvent implements Listener {
 | 
			
		||||
 | 
			
		||||
    @EventHandler(priority = EventPriority.LOW)
 | 
			
		||||
    public void onCraftItemEvent(CraftItemEvent e){
 | 
			
		||||
 | 
			
		||||
        Recipe recipe = e.getRecipe();
 | 
			
		||||
        ItemStack itemResult = recipe.getResult();
 | 
			
		||||
 | 
			
		||||
        // Check if it has LinkedBeaconTeleporter-Data
 | 
			
		||||
        LinkedBeaconTeleporterItem lbtItem = Main.lbtManager.getLbtItemFromItemStack(itemResult);
 | 
			
		||||
        if(lbtItem != null){
 | 
			
		||||
            eu.ruekov.ruakij.LinkedBeaconTeleporters.linkedBeaconTeleporter.listener.OnCraftItemEvent.onCraftItemEvent(e, lbtItem);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,31 +0,0 @@
 | 
			
		||||
package eu.ruekov.ruakij.LinkedBeaconTeleporters.listener;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Material;
 | 
			
		||||
import org.bukkit.event.EventHandler;
 | 
			
		||||
import org.bukkit.event.EventPriority;
 | 
			
		||||
import org.bukkit.event.Listener;
 | 
			
		||||
import org.bukkit.event.inventory.PrepareItemCraftEvent;
 | 
			
		||||
import org.bukkit.inventory.CraftingInventory;
 | 
			
		||||
import org.bukkit.inventory.InventoryView;
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
 | 
			
		||||
public class OnPrepareItemCraftEvent implements Listener {
 | 
			
		||||
 | 
			
		||||
    @EventHandler(priority = EventPriority.LOW)
 | 
			
		||||
    public void onPrepareItemCraftEvent(PrepareItemCraftEvent e){
 | 
			
		||||
 | 
			
		||||
        ItemStack[] matrix = e.getInventory().getMatrix();
 | 
			
		||||
 | 
			
		||||
        // Check if 2 beacons are in the crafting-slots
 | 
			
		||||
        int beaconCount = 0;
 | 
			
		||||
        for (ItemStack item : matrix) {
 | 
			
		||||
            if(item == null) continue;
 | 
			
		||||
            if(item.getType() == Material.BEACON)
 | 
			
		||||
                beaconCount++;
 | 
			
		||||
        }
 | 
			
		||||
        if(beaconCount == 2){
 | 
			
		||||
            // Exactly 2 beacons found
 | 
			
		||||
            eu.ruekov.ruakij.LinkedBeaconTeleporters.linkedBeaconTeleporter.listener.OnPrepareItemCraftEvent.onPrepareItemCraftEvent(e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user