1
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:
TheBusyBiscuit 2019-08-30 13:47:58 +02:00
parent 7afcfda89a
commit 0fd44d2136
13 changed files with 193 additions and 169 deletions

View File

@ -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;

View File

@ -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());
} }

View File

@ -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;
} }

View File

@ -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);

View File

@ -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());
} }
} }
} }

View File

@ -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());
} }
} }
} }

View File

@ -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());
} }
} }
} }

View File

@ -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;

View File

@ -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;
}
} }

View File

@ -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

View File

@ -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;

View File

@ -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;
} }
} }

View File

@ -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;
} }
} }
} }