2016-04-14 16:24:03 +00:00
|
|
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
|
|
|
|
|
2019-03-31 18:32:40 +00:00
|
|
|
import org.bukkit.Material;
|
|
|
|
import org.bukkit.Particle;
|
|
|
|
import org.bukkit.block.Block;
|
|
|
|
import org.bukkit.entity.Entity;
|
|
|
|
import org.bukkit.entity.LivingEntity;
|
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
import org.bukkit.inventory.ItemStack;
|
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
|
|
|
|
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
|
|
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
|
|
|
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
|
|
|
import me.mrCookieSlime.CSCoreLibPlugin.general.World.Animals;
|
|
|
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
|
|
|
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
|
|
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
|
|
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
|
|
|
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
|
|
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
|
|
|
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker;
|
|
|
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
|
|
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
|
|
|
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
|
|
|
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
|
|
|
|
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
|
|
|
|
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
|
|
|
|
|
|
|
|
public class AutoBreeder extends SlimefunItem {
|
|
|
|
|
|
|
|
private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26};
|
|
|
|
|
|
|
|
public AutoBreeder(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
|
|
|
|
super(category, item, name, recipeType, recipe);
|
|
|
|
|
2016-11-23 15:51:57 +00:00
|
|
|
new BlockMenuPreset(name, "&6Auto Breeder") {
|
2016-04-14 16:24:03 +00:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public void init() {
|
|
|
|
constructMenu(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void newInstance(BlockMenu menu, Block b) {
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean canOpen(Block b, Player p) {
|
|
|
|
return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
|
|
|
|
if (flow.equals(ItemTransportFlow.INSERT)) return getInputSlots();
|
|
|
|
return new int[0];
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
registerBlockHandler(name, new SlimefunBlockHandler() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onPlace(Player p, Block b, SlimefunItem item) {
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
|
|
|
|
me.mrCookieSlime.Slimefun.holograms.AutoBreeder.getArmorStand(b).remove();
|
2018-04-28 16:05:43 +00:00
|
|
|
BlockMenu inv = BlockStorage.getInventory(b);
|
|
|
|
if (inv != null) {
|
2019-03-31 18:32:40 +00:00
|
|
|
for (int slot : getInputSlots()) {
|
2018-04-28 16:05:43 +00:00
|
|
|
if (inv.getItemInSlot(slot) != null) {
|
|
|
|
b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
|
|
|
|
inv.replaceExistingItem(slot, null);
|
|
|
|
}
|
2018-04-26 03:40:46 +00:00
|
|
|
}
|
2016-04-14 16:24:03 +00:00
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
protected void constructMenu(BlockMenuPreset preset) {
|
2019-03-31 18:32:40 +00:00
|
|
|
for (int i : border) {
|
2018-09-05 16:36:32 +00:00
|
|
|
preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "),
|
2019-03-31 18:32:40 +00:00
|
|
|
(p, slot, item, action) -> false
|
|
|
|
);
|
2016-04-14 16:24:03 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public int getEnergyConsumption() {
|
|
|
|
return 60;
|
|
|
|
}
|
|
|
|
|
|
|
|
public int[] getInputSlots() {
|
|
|
|
return new int[] {10, 11, 12, 13, 14, 15, 16};
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void register(boolean slimefun) {
|
|
|
|
addItemHandler(new BlockTicker() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void tick(Block b, SlimefunItem sf, Config data) {
|
|
|
|
try {
|
|
|
|
AutoBreeder.this.tick(b);
|
|
|
|
} catch (Exception e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void uniqueTick() {
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean isSynchronized() {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
super.register(slimefun);
|
|
|
|
}
|
|
|
|
|
|
|
|
protected void tick(Block b) throws Exception {
|
2019-03-31 18:32:40 +00:00
|
|
|
for (Entity n : me.mrCookieSlime.Slimefun.holograms.AutoBreeder.getArmorStand(b).getNearbyEntities(4D, 2D, 4D)) {
|
2016-04-14 16:24:03 +00:00
|
|
|
if (Animals.isFeedable(n)) {
|
2019-03-31 18:32:40 +00:00
|
|
|
for (int slot : getInputSlots()) {
|
2016-04-14 16:24:03 +00:00
|
|
|
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.ORGANIC_FOOD, false)) {
|
|
|
|
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
|
|
|
|
ChargableBlock.addCharge(b, -getEnergyConsumption());
|
|
|
|
BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1));
|
|
|
|
Animals.feed(n);
|
2018-09-04 16:56:51 +00:00
|
|
|
n.getWorld().spawnParticle(Particle.HEART,((LivingEntity) n).getEyeLocation(), 8, 0.2F, 0.2F, 0.2F);
|
2016-04-14 16:24:03 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|