mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-20 11:45:51 +00:00
Reduced technical debt
This commit is contained in:
parent
7afcfda89a
commit
0fd44d2136
@ -10,6 +10,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
|||||||
import me.mrCookieSlime.Slimefun.Lists.Categories;
|
import me.mrCookieSlime.Slimefun.Lists.Categories;
|
||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
|
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||||
|
|
||||||
public class EnhancedFurnace extends SlimefunItem {
|
public class EnhancedFurnace extends SlimefunItem {
|
||||||
|
|
||||||
@ -25,9 +26,14 @@ public class EnhancedFurnace extends SlimefunItem {
|
|||||||
this.fortune = fortune - 1;
|
this.fortune = fortune - 1;
|
||||||
|
|
||||||
addItemHandler(new BlockTicker() {
|
addItemHandler(new BlockTicker() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick(Block b, SlimefunItem item, Config data) {
|
public void tick(Block b, SlimefunItem item, Config data) {
|
||||||
if (b.getState() instanceof Furnace && ((Furnace) b.getState()).getCookTime() > 0) {
|
if (!(b.getState() instanceof Furnace)) {
|
||||||
|
// The Furnace has been destroyed, we can clear the block data
|
||||||
|
BlockStorage.clearBlockInfo(b);
|
||||||
|
}
|
||||||
|
else if (((Furnace) b.getState()).getCookTime() > 0) {
|
||||||
Furnace furnace = (Furnace) b.getState();
|
Furnace furnace = (Furnace) b.getState();
|
||||||
|
|
||||||
int newCookTime = furnace.getCookTime() + getSpeed() * 10;
|
int newCookTime = furnace.getCookTime() + getSpeed() * 10;
|
||||||
@ -39,10 +45,6 @@ public class EnhancedFurnace extends SlimefunItem {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void uniqueTick() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isSynchronized() {
|
public boolean isSynchronized() {
|
||||||
return true;
|
return true;
|
||||||
|
@ -255,11 +255,10 @@ public abstract class AContainer extends SlimefunItem {
|
|||||||
|
|
||||||
for (MachineRecipe recipe: recipes) {
|
for (MachineRecipe recipe: recipes) {
|
||||||
for (ItemStack input: recipe.getInput()) {
|
for (ItemStack input: recipe.getInput()) {
|
||||||
slots:
|
|
||||||
for (int slot: getInputSlots()) {
|
for (int slot: getInputSlots()) {
|
||||||
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), input, true)) {
|
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), input, true)) {
|
||||||
found.put(slot, input.getAmount());
|
found.put(slot, input.getAmount());
|
||||||
break slots;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -272,9 +271,11 @@ public abstract class AContainer extends SlimefunItem {
|
|||||||
|
|
||||||
if (r != null) {
|
if (r != null) {
|
||||||
if (!fits(b, r.getOutput())) return;
|
if (!fits(b, r.getOutput())) return;
|
||||||
|
|
||||||
for (Map.Entry<Integer, Integer> entry: found.entrySet()) {
|
for (Map.Entry<Integer, Integer> entry: found.entrySet()) {
|
||||||
BlockStorage.getInventory(b).replaceExistingItem(entry.getKey(), InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(entry.getKey()), entry.getValue()));
|
BlockStorage.getInventory(b).replaceExistingItem(entry.getKey(), InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(entry.getKey()), entry.getValue()));
|
||||||
}
|
}
|
||||||
|
|
||||||
processing.put(b, r);
|
processing.put(b, r);
|
||||||
progress.put(b, r.getTicks());
|
progress.put(b, r.getTicks());
|
||||||
}
|
}
|
||||||
|
@ -218,25 +218,17 @@ public abstract class AGenerator extends SlimefunItem {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
MachineFuel r = null;
|
BlockMenu menu = BlockStorage.getInventory(l);
|
||||||
Map<Integer, Integer> found = new HashMap<>();
|
Map<Integer, Integer> found = new HashMap<>();
|
||||||
outer:
|
MachineFuel fuel = findRecipe(menu, found);
|
||||||
for (MachineFuel recipe: recipes) {
|
|
||||||
for (int slot: getInputSlots()) {
|
if (fuel != null) {
|
||||||
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(l).getItemInSlot(slot), recipe.getInput(), true)) {
|
for (Map.Entry<Integer, Integer> entry: found.entrySet()) {
|
||||||
found.put(slot, recipe.getInput().getAmount());
|
menu.replaceExistingItem(entry.getKey(), InvUtils.decreaseItem(menu.getItemInSlot(entry.getKey()), entry.getValue()));
|
||||||
r = recipe;
|
|
||||||
break outer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r != null) {
|
processing.put(l, fuel);
|
||||||
for (Map.Entry<Integer, Integer> entry: found.entrySet()) {
|
progress.put(l, fuel.getTicks());
|
||||||
BlockStorage.getInventory(l).replaceExistingItem(entry.getKey(), InvUtils.decreaseItem(BlockStorage.getInventory(l).getItemInSlot(entry.getKey()), entry.getValue()));
|
|
||||||
}
|
|
||||||
processing.put(l, r);
|
|
||||||
progress.put(l, r.getTicks());
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -251,6 +243,19 @@ public abstract class AGenerator extends SlimefunItem {
|
|||||||
super.register(slimefun);
|
super.register(slimefun);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private MachineFuel findRecipe(BlockMenu menu, Map<Integer, Integer> found) {
|
||||||
|
for (MachineFuel recipe: recipes) {
|
||||||
|
for (int slot: getInputSlots()) {
|
||||||
|
if (SlimefunManager.isItemSimiliar(menu.getItemInSlot(slot), recipe.getInput(), true)) {
|
||||||
|
found.put(slot, recipe.getInput().getAmount());
|
||||||
|
return recipe;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public Set<MachineFuel> getFuelTypes() {
|
public Set<MachineFuel> getFuelTypes() {
|
||||||
return this.recipes;
|
return this.recipes;
|
||||||
}
|
}
|
||||||
|
@ -353,39 +353,19 @@ public abstract class AReactor extends SlimefunItem {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
MachineFuel r = null;
|
BlockMenu menu = BlockStorage.getInventory(l);
|
||||||
Map<Integer, Integer> found = new HashMap<>();
|
Map<Integer, Integer> found = new HashMap<>();
|
||||||
|
MachineFuel fuel = findRecipe(menu, found);
|
||||||
|
|
||||||
if (port != null) {
|
if (port != null) restockCoolant(l, port);
|
||||||
refill:
|
|
||||||
for (int slot: getFuelSlots()) {
|
|
||||||
for (MachineFuel recipe: recipes) {
|
|
||||||
if (SlimefunManager.isItemSimiliar(port.getItemInSlot(slot), recipe.getInput(), true) && pushItems(l, new CustomItem(port.getItemInSlot(slot), 1), getFuelSlots()) == null) {
|
|
||||||
port.replaceExistingItem(slot, InvUtils.decreaseItem(port.getItemInSlot(slot), 1));
|
|
||||||
break refill;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
outer:
|
if (fuel != null) {
|
||||||
for (MachineFuel recipe: recipes) {
|
|
||||||
for (int slot: getFuelSlots()) {
|
|
||||||
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(l).getItemInSlot(slot), recipe.getInput(), true)) {
|
|
||||||
found.put(slot, recipe.getInput().getAmount());
|
|
||||||
r = recipe;
|
|
||||||
break outer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (r != null) {
|
|
||||||
for (Map.Entry<Integer, Integer> entry: found.entrySet()) {
|
for (Map.Entry<Integer, Integer> entry: found.entrySet()) {
|
||||||
BlockStorage.getInventory(l).replaceExistingItem(entry.getKey(), InvUtils.decreaseItem(BlockStorage.getInventory(l).getItemInSlot(entry.getKey()), entry.getValue()));
|
menu.replaceExistingItem(entry.getKey(), InvUtils.decreaseItem(menu.getItemInSlot(entry.getKey()), entry.getValue()));
|
||||||
}
|
}
|
||||||
|
|
||||||
processing.put(l, r);
|
processing.put(l, fuel);
|
||||||
progress.put(l, r.getTicks());
|
progress.put(l, fuel.getTicks());
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -410,6 +390,30 @@ public abstract class AReactor extends SlimefunItem {
|
|||||||
super.register(slimefun);
|
super.register(slimefun);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void restockCoolant(Location l, BlockMenu port) {
|
||||||
|
for (int slot: getFuelSlots()) {
|
||||||
|
for (MachineFuel recipe: recipes) {
|
||||||
|
if (SlimefunManager.isItemSimiliar(port.getItemInSlot(slot), recipe.getInput(), true) && pushItems(l, new CustomItem(port.getItemInSlot(slot), 1), getFuelSlots()) == null) {
|
||||||
|
port.replaceExistingItem(slot, InvUtils.decreaseItem(port.getItemInSlot(slot), 1));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private MachineFuel findRecipe(BlockMenu menu, Map<Integer, Integer> found) {
|
||||||
|
for (MachineFuel recipe: recipes) {
|
||||||
|
for (int slot: getInputSlots()) {
|
||||||
|
if (SlimefunManager.isItemSimiliar(menu.getItemInSlot(slot), recipe.getInput(), true)) {
|
||||||
|
found.put(slot, recipe.getInput().getAmount());
|
||||||
|
return recipe;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private Inventory inject(Location l) {
|
private Inventory inject(Location l) {
|
||||||
int size = BlockStorage.getInventory(l).toInventory().getSize();
|
int size = BlockStorage.getInventory(l).toInventory().getSize();
|
||||||
Inventory inv = Bukkit.createInventory(null, size);
|
Inventory inv = Bukkit.createInventory(null, size);
|
||||||
|
@ -3,6 +3,12 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.Damageable;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
@ -14,12 +20,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecip
|
|||||||
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||||
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
import org.bukkit.inventory.meta.Damageable;
|
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
|
||||||
|
|
||||||
public abstract class AutoAnvil extends AContainer {
|
public abstract class AutoAnvil extends AContainer {
|
||||||
|
|
||||||
@ -86,11 +87,13 @@ public abstract class AutoAnvil extends AContainer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
MachineRecipe r = null;
|
BlockMenu menu = BlockStorage.getInventory(b);
|
||||||
slots:
|
MachineRecipe recipe = null;
|
||||||
|
|
||||||
for (int slot: getInputSlots()) {
|
for (int slot: getInputSlots()) {
|
||||||
ItemStack target = BlockStorage.getInventory(b).getItemInSlot(slot == getInputSlots()[0] ? getInputSlots()[1]: getInputSlots()[0]);
|
ItemStack target = menu.getItemInSlot(slot == getInputSlots()[0] ? getInputSlots()[1]: getInputSlots()[0]);
|
||||||
ItemStack item = BlockStorage.getInventory(b).getItemInSlot(slot);
|
ItemStack item = menu.getItemInSlot(slot);
|
||||||
|
|
||||||
if (item != null && item.getType().getMaxDurability() > 0 && ((Damageable) item.getItemMeta()).getDamage() > 0) {
|
if (item != null && item.getType().getMaxDurability() > 0 && ((Damageable) item.getItemMeta()).getDamage() > 0) {
|
||||||
if (SlimefunManager.isItemSimiliar(target, SlimefunItems.DUCT_TAPE, true)) {
|
if (SlimefunManager.isItemSimiliar(target, SlimefunItems.DUCT_TAPE, true)) {
|
||||||
ItemStack newItem = item.clone();
|
ItemStack newItem = item.clone();
|
||||||
@ -99,19 +102,20 @@ public abstract class AutoAnvil extends AContainer {
|
|||||||
ItemMeta meta = newItem.getItemMeta();
|
ItemMeta meta = newItem.getItemMeta();
|
||||||
((Damageable) meta).setDamage(durability);
|
((Damageable) meta).setDamage(durability);
|
||||||
newItem.setItemMeta(meta);
|
newItem.setItemMeta(meta);
|
||||||
r = new MachineRecipe(30, new ItemStack[] {target, item}, new ItemStack[] {newItem});
|
recipe = new MachineRecipe(30, new ItemStack[] {target, item}, new ItemStack[] {newItem});
|
||||||
}
|
}
|
||||||
break slots;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r != null) {
|
if (recipe != null) {
|
||||||
if (!fits(b, r.getOutput())) return;
|
if (!fits(b, recipe.getOutput())) return;
|
||||||
|
|
||||||
for (int slot: getInputSlots()) {
|
for (int slot: getInputSlots()) {
|
||||||
BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1));
|
menu.replaceExistingItem(slot, InvUtils.decreaseItem(menu.getItemInSlot(slot), 1));
|
||||||
}
|
}
|
||||||
processing.put(b, r);
|
processing.put(b, recipe);
|
||||||
progress.put(b, r.getTicks());
|
progress.put(b, recipe.getTicks());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecip
|
|||||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||||
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||||
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
|
||||||
|
|
||||||
public class AutoDisenchanter extends AContainer {
|
public class AutoDisenchanter extends AContainer {
|
||||||
|
|
||||||
@ -87,13 +88,14 @@ public class AutoDisenchanter extends AContainer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
MachineRecipe r = null;
|
BlockMenu menu = BlockStorage.getInventory(b);
|
||||||
|
MachineRecipe recipe = null;
|
||||||
Map<Enchantment, Integer> enchantments = new HashMap<>();
|
Map<Enchantment, Integer> enchantments = new HashMap<>();
|
||||||
Set<ItemEnchantment> enchantments2 = new HashSet<>();
|
Set<ItemEnchantment> enchantments2 = new HashSet<>();
|
||||||
slots:
|
|
||||||
for (int slot: getInputSlots()) {
|
for (int slot: getInputSlots()) {
|
||||||
ItemStack target = BlockStorage.getInventory(b).getItemInSlot(slot == getInputSlots()[0] ? getInputSlots()[1]: getInputSlots()[0]);
|
ItemStack target = menu.getItemInSlot(slot == getInputSlots()[0] ? getInputSlots()[1]: getInputSlots()[0]);
|
||||||
ItemStack item = BlockStorage.getInventory(b).getItemInSlot(slot);
|
ItemStack item = menu.getItemInSlot(slot);
|
||||||
|
|
||||||
// Check if disenchantable
|
// Check if disenchantable
|
||||||
SlimefunItem sfItem = null;
|
SlimefunItem sfItem = null;
|
||||||
@ -133,19 +135,22 @@ public class AutoDisenchanter extends AContainer {
|
|||||||
EmeraldEnchants.getInstance().getRegistry().applyEnchantment(book, e.getEnchantment(), e.getLevel());
|
EmeraldEnchants.getInstance().getRegistry().applyEnchantment(book, e.getEnchantment(), e.getLevel());
|
||||||
EmeraldEnchants.getInstance().getRegistry().applyEnchantment(newItem, e.getEnchantment(), 0);
|
EmeraldEnchants.getInstance().getRegistry().applyEnchantment(newItem, e.getEnchantment(), 0);
|
||||||
}
|
}
|
||||||
r = new MachineRecipe(100 * amount, new ItemStack[] {target, item}, new ItemStack[] {newItem, book});
|
|
||||||
break slots;
|
recipe = new MachineRecipe(100 * amount, new ItemStack[] {target, item}, new ItemStack[] {newItem, book});
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r != null) {
|
if (recipe != null) {
|
||||||
if (!fits(b, r.getOutput())) return;
|
if (!fits(b, recipe.getOutput())) return;
|
||||||
|
|
||||||
for (int slot: getInputSlots()) {
|
for (int slot: getInputSlots()) {
|
||||||
BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1));
|
menu.replaceExistingItem(slot, InvUtils.decreaseItem(menu.getItemInSlot(slot), 1));
|
||||||
}
|
}
|
||||||
processing.put(b, r);
|
|
||||||
progress.put(b, r.getTicks());
|
processing.put(b, recipe);
|
||||||
|
progress.put(b, recipe.getTicks());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecip
|
|||||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||||
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||||
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
|
||||||
|
|
||||||
public class AutoEnchanter extends AContainer {
|
public class AutoEnchanter extends AContainer {
|
||||||
|
|
||||||
@ -88,15 +89,16 @@ public class AutoEnchanter extends AContainer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
MachineRecipe r = null;
|
BlockMenu menu = BlockStorage.getInventory(b.getLocation());
|
||||||
slots:
|
MachineRecipe recipe = null;
|
||||||
|
|
||||||
for (int slot: getInputSlots()) {
|
for (int slot: getInputSlots()) {
|
||||||
ItemStack target = BlockStorage.getInventory(b).getItemInSlot(slot == getInputSlots()[0] ? getInputSlots()[1]: getInputSlots()[0]);
|
ItemStack target = menu.getItemInSlot(slot == getInputSlots()[0] ? getInputSlots()[1]: getInputSlots()[0]);
|
||||||
// Check if enchantable
|
// Check if enchantable
|
||||||
SlimefunItem sfTarget = SlimefunItem.getByItem(target);
|
SlimefunItem sfTarget = SlimefunItem.getByItem(target);
|
||||||
if(sfTarget != null && !sfTarget.isEnchantable()) return;
|
if(sfTarget != null && !sfTarget.isEnchantable()) return;
|
||||||
|
|
||||||
ItemStack item = BlockStorage.getInventory(b).getItemInSlot(slot);
|
ItemStack item = menu.getItemInSlot(slot);
|
||||||
|
|
||||||
// Enchant
|
// Enchant
|
||||||
if (item != null && item.getType() == Material.ENCHANTED_BOOK && target != null) {
|
if (item != null && item.getType() == Material.ENCHANTED_BOOK && target != null) {
|
||||||
@ -105,12 +107,14 @@ public class AutoEnchanter extends AContainer {
|
|||||||
int amount = 0;
|
int amount = 0;
|
||||||
int special_amount = 0;
|
int special_amount = 0;
|
||||||
EnchantmentStorageMeta meta = (EnchantmentStorageMeta) item.getItemMeta();
|
EnchantmentStorageMeta meta = (EnchantmentStorageMeta) item.getItemMeta();
|
||||||
|
|
||||||
for (Map.Entry<Enchantment, Integer> e: meta.getStoredEnchants().entrySet()) {
|
for (Map.Entry<Enchantment, Integer> e: meta.getStoredEnchants().entrySet()) {
|
||||||
if (e.getKey().canEnchantItem(target)) {
|
if (e.getKey().canEnchantItem(target)) {
|
||||||
amount++;
|
amount++;
|
||||||
enchantments.put(e.getKey(), e.getValue());
|
enchantments.put(e.getKey(), e.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Slimefun.isEmeraldEnchantsInstalled()) {
|
if (Slimefun.isEmeraldEnchantsInstalled()) {
|
||||||
for (ItemEnchantment enchantment: EmeraldEnchants.getInstance().getRegistry().getEnchantments(item)) {
|
for (ItemEnchantment enchantment: EmeraldEnchants.getInstance().getRegistry().getEnchantments(item)) {
|
||||||
if (EmeraldEnchants.getInstance().getRegistry().isApplicable(target, enchantment.getEnchantment()) && EmeraldEnchants.getInstance().getRegistry().getEnchantmentLevel(target, enchantment.getEnchantment().getName()) < enchantment.getLevel()) {
|
if (EmeraldEnchants.getInstance().getRegistry().isApplicable(target, enchantment.getEnchantment()) && EmeraldEnchants.getInstance().getRegistry().getEnchantmentLevel(target, enchantment.getEnchantment().getName()) < enchantment.getLevel()) {
|
||||||
@ -121,27 +125,32 @@ public class AutoEnchanter extends AContainer {
|
|||||||
}
|
}
|
||||||
special_amount += EmeraldEnchants.getInstance().getRegistry().getEnchantments(target).size();
|
special_amount += EmeraldEnchants.getInstance().getRegistry().getEnchantments(target).size();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (amount > 0 && special_amount <= SlimefunStartup.instance.getSettings().EMERALD_ENCHANTS_LIMIT) {
|
if (amount > 0 && special_amount <= SlimefunStartup.instance.getSettings().EMERALD_ENCHANTS_LIMIT) {
|
||||||
ItemStack newItem = target.clone();
|
ItemStack newItem = target.clone();
|
||||||
for (Map.Entry<Enchantment, Integer> e: enchantments.entrySet()) {
|
for (Map.Entry<Enchantment, Integer> e: enchantments.entrySet()) {
|
||||||
newItem.addUnsafeEnchantment(e.getKey(), e.getValue());
|
newItem.addUnsafeEnchantment(e.getKey(), e.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
for (ItemEnchantment e: enchantments2) {
|
for (ItemEnchantment e: enchantments2) {
|
||||||
EmeraldEnchants.getInstance().getRegistry().applyEnchantment(newItem, e.getEnchantment(), e.getLevel());
|
EmeraldEnchants.getInstance().getRegistry().applyEnchantment(newItem, e.getEnchantment(), e.getLevel());
|
||||||
}
|
}
|
||||||
r = new MachineRecipe(75 * amount, new ItemStack[] {target, item}, new ItemStack[] {newItem, new ItemStack(Material.BOOK)});
|
|
||||||
|
recipe = new MachineRecipe(75 * amount, new ItemStack[] {target, item}, new ItemStack[] {newItem, new ItemStack(Material.BOOK)});
|
||||||
}
|
}
|
||||||
break slots;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r != null) {
|
if (recipe != null) {
|
||||||
if (!fits(b, r.getOutput())) return;
|
if (!fits(b, recipe.getOutput())) return;
|
||||||
|
|
||||||
for (int slot: getInputSlots()) {
|
for (int slot: getInputSlots()) {
|
||||||
BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1));
|
menu.replaceExistingItem(slot, InvUtils.decreaseItem(menu.getItemInSlot(slot), 1));
|
||||||
}
|
}
|
||||||
processing.put(b, r);
|
|
||||||
progress.put(b, r.getTicks());
|
processing.put(b, recipe);
|
||||||
|
progress.put(b, recipe.getTicks());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -210,10 +210,6 @@ public abstract class AutomatedCraftingChamber extends SlimefunItem {
|
|||||||
AutomatedCraftingChamber.this.tick(b);
|
AutomatedCraftingChamber.this.tick(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void uniqueTick() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isSynchronized() {
|
public boolean isSynchronized() {
|
||||||
return false;
|
return false;
|
||||||
|
@ -131,32 +131,7 @@ public abstract class CropGrowthAccelerator extends SlimefunItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void tick(Block b) throws Exception {
|
protected void tick(Block b) throws Exception {
|
||||||
int work = 0;
|
if (work(b) > 0) {
|
||||||
master:
|
|
||||||
for (int x = -getRadius(); x <= getRadius(); x++) {
|
|
||||||
for (int z = -getRadius(); z <= getRadius(); z++) {
|
|
||||||
Block block = b.getRelative(x, 0, z);
|
|
||||||
if (crops.containsKey(block.getType()) && ((Ageable) block.getBlockData()).getAge() < crops.get(block.getType())) {
|
|
||||||
for (int slot : getInputSlots()) {
|
|
||||||
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.FERTILIZER, false)) {
|
|
||||||
if (work > (getSpeed() - 1)) break master;
|
|
||||||
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) break master;
|
|
||||||
ChargableBlock.addCharge(b, -getEnergyConsumption());
|
|
||||||
|
|
||||||
Ageable ageable = (Ageable) block.getBlockData();
|
|
||||||
ageable.setAge(ageable.getAge() + 1);
|
|
||||||
block.setBlockData(ageable);
|
|
||||||
|
|
||||||
block.getWorld().spawnParticle(Particle.VILLAGER_HAPPY, block.getLocation().add(0.5D, 0.5D, 0.5D), 4, 0.1F, 0.1F, 0.1F);
|
|
||||||
work++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (work > 0) {
|
|
||||||
for (int slot : getInputSlots()) {
|
for (int slot : getInputSlots()) {
|
||||||
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.FERTILIZER, false)) {
|
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.FERTILIZER, false)) {
|
||||||
BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1));
|
BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1));
|
||||||
@ -166,4 +141,32 @@ public abstract class CropGrowthAccelerator extends SlimefunItem {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int work(Block b) {
|
||||||
|
int work = 0;
|
||||||
|
|
||||||
|
for (int x = -getRadius(); x <= getRadius(); x++) {
|
||||||
|
for (int z = -getRadius(); z <= getRadius(); z++) {
|
||||||
|
Block block = b.getRelative(x, 0, z);
|
||||||
|
if (crops.containsKey(block.getType()) && ((Ageable) block.getBlockData()).getAge() < crops.get(block.getType())) {
|
||||||
|
for (int slot : getInputSlots()) {
|
||||||
|
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.FERTILIZER, false)) {
|
||||||
|
if (work > (getSpeed() - 1) || ChargableBlock.getCharge(b) < getEnergyConsumption()) return work;
|
||||||
|
ChargableBlock.addCharge(b, -getEnergyConsumption());
|
||||||
|
|
||||||
|
Ageable ageable = (Ageable) block.getBlockData();
|
||||||
|
ageable.setAge(ageable.getAge() + 1);
|
||||||
|
block.setBlockData(ageable);
|
||||||
|
|
||||||
|
block.getWorld().spawnParticle(Particle.VILLAGER_HAPPY, block.getLocation().add(0.5D, 0.5D, 0.5D), 4, 0.1F, 0.1F, 0.1F);
|
||||||
|
work++;
|
||||||
|
return work;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return work;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -131,10 +131,6 @@ public abstract class HeatedPressureChamber extends AContainer {
|
|||||||
HeatedPressureChamber.this.tick(b);
|
HeatedPressureChamber.this.tick(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void uniqueTick() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isSynchronized() {
|
public boolean isSynchronized() {
|
||||||
return false;
|
return false;
|
||||||
@ -148,6 +144,7 @@ public abstract class HeatedPressureChamber extends AContainer {
|
|||||||
protected void tick(Block b) {
|
protected void tick(Block b) {
|
||||||
if (isProcessing(b)) {
|
if (isProcessing(b)) {
|
||||||
int timeleft = progress.get(b);
|
int timeleft = progress.get(b);
|
||||||
|
|
||||||
if (timeleft > 0) {
|
if (timeleft > 0) {
|
||||||
ItemStack item = getProgressBar().clone();
|
ItemStack item = getProgressBar().clone();
|
||||||
ItemMeta im = item.getItemMeta();
|
ItemMeta im = item.getItemMeta();
|
||||||
@ -178,35 +175,40 @@ public abstract class HeatedPressureChamber extends AContainer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
MachineRecipe r = null;
|
BlockMenu menu = BlockStorage.getInventory(b.getLocation());
|
||||||
Map<Integer, Integer> found = new HashMap<>();
|
Map<Integer, Integer> found = new HashMap<>();
|
||||||
|
MachineRecipe recipe = findRecipe(menu, found);
|
||||||
|
|
||||||
|
if (recipe != null) {
|
||||||
|
if (!fits(b, recipe.getOutput())) return;
|
||||||
|
|
||||||
|
for (Map.Entry<Integer, Integer> entry: found.entrySet()) {
|
||||||
|
menu.replaceExistingItem(entry.getKey(), InvUtils.decreaseItem(menu.getItemInSlot(entry.getKey()), entry.getValue()));
|
||||||
|
}
|
||||||
|
|
||||||
|
processing.put(b, recipe);
|
||||||
|
progress.put(b, recipe.getTicks());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private MachineRecipe findRecipe(BlockMenu menu, Map<Integer, Integer> found) {
|
||||||
for (MachineRecipe recipe: recipes) {
|
for (MachineRecipe recipe: recipes) {
|
||||||
for (ItemStack input: recipe.getInput()) {
|
for (ItemStack input: recipe.getInput()) {
|
||||||
slots:
|
|
||||||
for (int slot: getInputSlots()) {
|
for (int slot: getInputSlots()) {
|
||||||
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), input, true)) {
|
if (SlimefunManager.isItemSimiliar(menu.getItemInSlot(slot), input, true)) {
|
||||||
found.put(slot, input.getAmount());
|
found.put(slot, input.getAmount());
|
||||||
break slots;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (found.size() == recipe.getInput().length) {
|
if (found.size() == recipe.getInput().length) {
|
||||||
r = recipe;
|
return recipe;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
else found.clear();
|
else found.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r != null) {
|
return null;
|
||||||
if (!fits(b, r.getOutput())) return;
|
|
||||||
for (Map.Entry<Integer, Integer> entry: found.entrySet()) {
|
|
||||||
BlockStorage.getInventory(b).replaceExistingItem(entry.getKey(), InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(entry.getKey()), entry.getValue()));
|
|
||||||
}
|
|
||||||
processing.put(b, r);
|
|
||||||
progress.put(b, r.getTicks());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1315,10 +1315,6 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
|
|||||||
if (b != null) ProgrammableAndroid.this.tick(b);
|
if (b != null) ProgrammableAndroid.this.tick(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void uniqueTick() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isSynchronized() {
|
public boolean isSynchronized() {
|
||||||
return true;
|
return true;
|
||||||
|
@ -73,7 +73,6 @@ public class TickerTask implements Runnable {
|
|||||||
long timestamp2 = System.currentTimeMillis();
|
long timestamp2 = System.currentTimeMillis();
|
||||||
chunks++;
|
chunks++;
|
||||||
|
|
||||||
blocks:
|
|
||||||
for (final Location l: BlockStorage.getTickingLocations(c)) {
|
for (final Location l: BlockStorage.getTickingLocations(c)) {
|
||||||
if (l.getWorld().isChunkLoaded(l.getBlockX() >> 4, l.getBlockZ() >> 4)) {
|
if (l.getWorld().isChunkLoaded(l.getBlockX() >> 4, l.getBlockZ() >> 4)) {
|
||||||
final Block b = l.getBlock();
|
final Block b = l.getBlock();
|
||||||
@ -178,7 +177,7 @@ public class TickerTask implements Runnable {
|
|||||||
skipped += BlockStorage.getTickingLocations(c).size();
|
skipped += BlockStorage.getTickingLocations(c).size();
|
||||||
chunksSkipped.add(c);
|
chunksSkipped.add(c);
|
||||||
chunks--;
|
chunks--;
|
||||||
break blocks;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -255,26 +255,25 @@ public class CargoNet extends Network {
|
|||||||
BlockMenu menu = BlockStorage.getInventory(request.getTerminal());
|
BlockMenu menu = BlockStorage.getInventory(request.getTerminal());
|
||||||
|
|
||||||
switch (request.getDirection()) {
|
switch (request.getDirection()) {
|
||||||
case INSERT: {
|
case INSERT:
|
||||||
ItemStack stack = request.getItem();
|
ItemStack requestedItem = request.getItem();
|
||||||
nodes:
|
|
||||||
for (Location l: destinations) {
|
for (Location l: destinations) {
|
||||||
Block target = getAttachedBlock(l.getBlock());
|
Block target = getAttachedBlock(l.getBlock());
|
||||||
stack = CargoManager.insert(l.getBlock(), storage, target, stack, -1);
|
requestedItem = CargoManager.insert(l.getBlock(), storage, target, requestedItem, -1);
|
||||||
if (stack == null) {
|
if (requestedItem == null) {
|
||||||
menu.replaceExistingItem(request.getSlot(), null);
|
menu.replaceExistingItem(request.getSlot(), null);
|
||||||
break nodes;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stack != null) {
|
if (requestedItem != null) {
|
||||||
menu.replaceExistingItem(request.getSlot(), stack);
|
menu.replaceExistingItem(request.getSlot(), requestedItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
iterator.remove();
|
iterator.remove();
|
||||||
break;
|
break;
|
||||||
}
|
case WITHDRAW:
|
||||||
case WITHDRAW: {
|
|
||||||
int slot = request.getSlot();
|
int slot = request.getSlot();
|
||||||
ItemStack prevStack = menu.getItemInSlot(slot);
|
ItemStack prevStack = menu.getItemInSlot(slot);
|
||||||
if (!(prevStack == null || (prevStack.getAmount() + request.getItem().getAmount() <= prevStack.getMaxStackSize() && SlimefunManager.isItemSimiliar(prevStack, new CustomItem(request.getItem(), 1), true)))) {
|
if (!(prevStack == null || (prevStack.getAmount() + request.getItem().getAmount() <= prevStack.getMaxStackSize() && SlimefunManager.isItemSimiliar(prevStack, new CustomItem(request.getItem(), 1), true)))) {
|
||||||
@ -284,7 +283,7 @@ public class CargoNet extends Network {
|
|||||||
|
|
||||||
ItemStack stack = null;
|
ItemStack stack = null;
|
||||||
ItemStack requested = request.getItem();
|
ItemStack requested = request.getItem();
|
||||||
nodes:
|
|
||||||
for (Location l : providers) {
|
for (Location l : providers) {
|
||||||
Block target = getAttachedBlock(l.getBlock());
|
Block target = getAttachedBlock(l.getBlock());
|
||||||
ItemStack is = CargoManager.withdraw(l.getBlock(), storage, target, requested);
|
ItemStack is = CargoManager.withdraw(l.getBlock(), storage, target, requested);
|
||||||
@ -297,7 +296,7 @@ public class CargoNet extends Network {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (is.getAmount() == requested.getAmount()) {
|
if (is.getAmount() == requested.getAmount()) {
|
||||||
break nodes;
|
break;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
requested = new CustomItem(requested, requested.getAmount() - is.getAmount());
|
requested = new CustomItem(requested, requested.getAmount() - is.getAmount());
|
||||||
@ -314,20 +313,20 @@ public class CargoNet extends Network {
|
|||||||
|
|
||||||
iterator.remove();
|
iterator.remove();
|
||||||
break;
|
break;
|
||||||
}
|
default:
|
||||||
default: {
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// All operations happen here: Everything gets iterated from the Input Nodes. (Apart from ChestTerminal Buses)
|
// All operations happen here: Everything gets iterated from the Input Nodes. (Apart from ChestTerminal Buses)
|
||||||
for (Location input: inputNodes) {
|
for (Location input: inputNodes) {
|
||||||
Integer frequency = getFrequency(input);
|
Integer frequency = getFrequency(input);
|
||||||
|
|
||||||
if (frequency < 0 || frequency > 15) {
|
if (frequency < 0 || frequency > 15) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Block inputTarget = getAttachedBlock(input.getBlock());
|
Block inputTarget = getAttachedBlock(input.getBlock());
|
||||||
ItemStack stack = null;
|
ItemStack stack = null;
|
||||||
int previousSlot = -1;
|
int previousSlot = -1;
|
||||||
@ -365,12 +364,11 @@ public class CargoNet extends Network {
|
|||||||
round_robin.put(input, c_index);
|
round_robin.put(input, c_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
destinations:
|
|
||||||
for (Location out : outputlist) {
|
for (Location out : outputlist) {
|
||||||
Block target = getAttachedBlock(out.getBlock());
|
Block target = getAttachedBlock(out.getBlock());
|
||||||
if (target != null) {
|
if (target != null) {
|
||||||
stack = CargoManager.insert(out.getBlock(), storage, target, stack, -1);
|
stack = CargoManager.insert(out.getBlock(), storage, target, stack, -1);
|
||||||
if (stack == null) break destinations;
|
if (stack == null) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user