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