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.linkedBeaconTeleporter.LinkedBeaconTeleporterManager;
|
||||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.listener.OnBlockBreak;
|
import eu.ruekov.ruakij.LinkedBeaconTeleporters.listener.OnBlockBreak;
|
||||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.listener.OnBlockPlace;
|
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.Bukkit;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
@ -33,7 +33,7 @@ public class Main extends JavaPlugin {
|
|||||||
PluginManager pluginManager = Bukkit.getPluginManager();
|
PluginManager pluginManager = Bukkit.getPluginManager();
|
||||||
pluginManager.registerEvents(new OnBlockBreak(), this);
|
pluginManager.registerEvents(new OnBlockBreak(), this);
|
||||||
pluginManager.registerEvents(new OnBlockPlace(), this);
|
pluginManager.registerEvents(new OnBlockPlace(), this);
|
||||||
pluginManager.registerEvents(new OnPrepareItemCraftEvent(), this);
|
pluginManager.registerEvents(new OnCraftItemEvent(), this);
|
||||||
|
|
||||||
loadConfigs();
|
loadConfigs();
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ public class LinkedBeaconTeleporterItem extends LinkedBeaconTeleporter {
|
|||||||
// Create a new LinkedBeaconTeleporter
|
// Create a new LinkedBeaconTeleporter
|
||||||
super();
|
super();
|
||||||
|
|
||||||
this.item = Main.lbtManager.getItemStackFromLbtItem(this);
|
this.item = Main.lbtManager.getItemStackFromData(this.teleporterId);
|
||||||
}
|
}
|
||||||
public LinkedBeaconTeleporterItem(String teleporterId, ItemStack item) {
|
public LinkedBeaconTeleporterItem(String teleporterId, ItemStack item) {
|
||||||
super(teleporterId);
|
super(teleporterId);
|
||||||
@ -27,7 +27,7 @@ public class LinkedBeaconTeleporterItem extends LinkedBeaconTeleporter {
|
|||||||
public LinkedBeaconTeleporterItem(String teleporterId){
|
public LinkedBeaconTeleporterItem(String teleporterId){
|
||||||
super(teleporterId);
|
super(teleporterId);
|
||||||
|
|
||||||
this.item = Main.lbtManager.getItemStackFromLbtItem(this);
|
this.item = Main.lbtManager.getItemStackFromData(teleporterId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ItemStack item(){
|
public ItemStack item(){
|
||||||
|
@ -2,11 +2,14 @@ package eu.ruekov.ruakij.LinkedBeaconTeleporters.linkedBeaconTeleporter;
|
|||||||
|
|
||||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.Function;
|
import eu.ruekov.ruakij.LinkedBeaconTeleporters.Function;
|
||||||
import eu.ruekov.ruakij.LinkedBeaconTeleporters.Main;
|
import eu.ruekov.ruakij.LinkedBeaconTeleporters.Main;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.NamespacedKey;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.ShapelessRecipe;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -31,6 +34,9 @@ public class LinkedBeaconTeleporterManager {
|
|||||||
Main.config.getStringList("item.lore")
|
Main.config.getStringList("item.lore")
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Construct & add crafting-receipes
|
||||||
|
constructAndAddRecipes();
|
||||||
|
|
||||||
// Load teleporters
|
// Load teleporters
|
||||||
for(String teleporterId : Main.data.getKeys(false)){
|
for(String teleporterId : Main.data.getKeys(false)){
|
||||||
ConfigurationSection teleportersData = Main.data.getConfigurationSection(teleporterId);
|
ConfigurationSection teleportersData = Main.data.getConfigurationSection(teleporterId);
|
||||||
@ -116,8 +122,29 @@ public class LinkedBeaconTeleporterManager {
|
|||||||
return lbtItem;
|
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
|
// Conversion-methods
|
||||||
public ItemStack getItemStackFromLbtItem(LinkedBeaconTeleporterItem lbtItem){
|
public ItemStack getItemStackFromData(String teleporterId){
|
||||||
ItemStack item = new ItemStack(Material.BEACON);
|
ItemStack item = new ItemStack(Material.BEACON);
|
||||||
ItemMeta itemMeta = item.getItemMeta();
|
ItemMeta itemMeta = item.getItemMeta();
|
||||||
|
|
||||||
@ -126,10 +153,10 @@ public class LinkedBeaconTeleporterManager {
|
|||||||
List<String> lore = Main.config.getStringList("item.lore");
|
List<String> lore = Main.config.getStringList("item.lore");
|
||||||
|
|
||||||
// Replace parameters
|
// Replace parameters
|
||||||
name = name.replace("%id%", lbtItem.teleporterId);
|
name = name.replace("%id%", teleporterId);
|
||||||
for(int i=0; i<lore.size(); i++){
|
for(int i=0; i<lore.size(); i++){
|
||||||
lore.set(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