mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-20 03:35: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.RecipeType;
|
||||
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
|
||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||
|
||||
public class EnhancedFurnace extends SlimefunItem {
|
||||
|
||||
@ -25,9 +26,14 @@ public class EnhancedFurnace extends SlimefunItem {
|
||||
this.fortune = fortune - 1;
|
||||
|
||||
addItemHandler(new BlockTicker() {
|
||||
|
||||
@Override
|
||||
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();
|
||||
|
||||
int newCookTime = furnace.getCookTime() + getSpeed() * 10;
|
||||
@ -39,10 +45,6 @@ public class EnhancedFurnace extends SlimefunItem {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void uniqueTick() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSynchronized() {
|
||||
return true;
|
||||
|
@ -255,11 +255,10 @@ public abstract class AContainer extends SlimefunItem {
|
||||
|
||||
for (MachineRecipe recipe: recipes) {
|
||||
for (ItemStack input: recipe.getInput()) {
|
||||
slots:
|
||||
for (int slot: getInputSlots()) {
|
||||
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), input, true)) {
|
||||
found.put(slot, input.getAmount());
|
||||
break slots;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -272,9 +271,11 @@ public abstract class AContainer extends SlimefunItem {
|
||||
|
||||
if (r != 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());
|
||||
}
|
||||
|
@ -218,25 +218,17 @@ public abstract class AGenerator extends SlimefunItem {
|
||||
}
|
||||
}
|
||||
else {
|
||||
MachineFuel r = null;
|
||||
BlockMenu menu = BlockStorage.getInventory(l);
|
||||
Map<Integer, Integer> found = new HashMap<>();
|
||||
outer:
|
||||
for (MachineFuel recipe: recipes) {
|
||||
for (int slot: getInputSlots()) {
|
||||
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(l).getItemInSlot(slot), recipe.getInput(), true)) {
|
||||
found.put(slot, recipe.getInput().getAmount());
|
||||
r = recipe;
|
||||
break outer;
|
||||
}
|
||||
}
|
||||
}
|
||||
MachineFuel fuel = findRecipe(menu, found);
|
||||
|
||||
if (r != null) {
|
||||
if (fuel != null) {
|
||||
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);
|
||||
progress.put(l, r.getTicks());
|
||||
|
||||
processing.put(l, fuel);
|
||||
progress.put(l, fuel.getTicks());
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -250,6 +242,19 @@ public abstract class AGenerator extends SlimefunItem {
|
||||
|
||||
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() {
|
||||
return this.recipes;
|
||||
|
@ -353,39 +353,19 @@ public abstract class AReactor extends SlimefunItem {
|
||||
}
|
||||
}
|
||||
else {
|
||||
MachineFuel r = null;
|
||||
BlockMenu menu = BlockStorage.getInventory(l);
|
||||
Map<Integer, Integer> found = new HashMap<>();
|
||||
MachineFuel fuel = findRecipe(menu, found);
|
||||
|
||||
if (port != null) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (port != null) restockCoolant(l, port);
|
||||
|
||||
outer:
|
||||
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) {
|
||||
if (fuel != null) {
|
||||
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);
|
||||
progress.put(l, r.getTicks());
|
||||
processing.put(l, fuel);
|
||||
progress.put(l, fuel.getTicks());
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -409,6 +389,30 @@ public abstract class AReactor extends SlimefunItem {
|
||||
|
||||
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) {
|
||||
int size = BlockStorage.getInventory(l).toInventory().getSize();
|
||||
|
@ -3,6 +3,12 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
|
||||
import java.util.ArrayList;
|
||||
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.Item.CustomItem;
|
||||
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.api.BlockStorage;
|
||||
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
||||
|
||||
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.Slimefun.api.inventory.BlockMenu;
|
||||
|
||||
public abstract class AutoAnvil extends AContainer {
|
||||
|
||||
@ -86,11 +87,13 @@ public abstract class AutoAnvil extends AContainer {
|
||||
}
|
||||
}
|
||||
else {
|
||||
MachineRecipe r = null;
|
||||
slots:
|
||||
BlockMenu menu = BlockStorage.getInventory(b);
|
||||
MachineRecipe recipe = null;
|
||||
|
||||
for (int slot: getInputSlots()) {
|
||||
ItemStack target = BlockStorage.getInventory(b).getItemInSlot(slot == getInputSlots()[0] ? getInputSlots()[1]: getInputSlots()[0]);
|
||||
ItemStack item = BlockStorage.getInventory(b).getItemInSlot(slot);
|
||||
ItemStack target = menu.getItemInSlot(slot == getInputSlots()[0] ? getInputSlots()[1]: getInputSlots()[0]);
|
||||
ItemStack item = menu.getItemInSlot(slot);
|
||||
|
||||
if (item != null && item.getType().getMaxDurability() > 0 && ((Damageable) item.getItemMeta()).getDamage() > 0) {
|
||||
if (SlimefunManager.isItemSimiliar(target, SlimefunItems.DUCT_TAPE, true)) {
|
||||
ItemStack newItem = item.clone();
|
||||
@ -99,19 +102,20 @@ public abstract class AutoAnvil extends AContainer {
|
||||
ItemMeta meta = newItem.getItemMeta();
|
||||
((Damageable) meta).setDamage(durability);
|
||||
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 (!fits(b, r.getOutput())) return;
|
||||
if (recipe != null) {
|
||||
if (!fits(b, recipe.getOutput())) return;
|
||||
|
||||
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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -28,6 +28,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecip
|
||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
||||
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
|
||||
|
||||
public class AutoDisenchanter extends AContainer {
|
||||
|
||||
@ -87,13 +88,14 @@ public class AutoDisenchanter extends AContainer {
|
||||
}
|
||||
}
|
||||
else {
|
||||
MachineRecipe r = null;
|
||||
BlockMenu menu = BlockStorage.getInventory(b);
|
||||
MachineRecipe recipe = null;
|
||||
Map<Enchantment, Integer> enchantments = new HashMap<>();
|
||||
Set<ItemEnchantment> enchantments2 = new HashSet<>();
|
||||
slots:
|
||||
|
||||
for (int slot: getInputSlots()) {
|
||||
ItemStack target = BlockStorage.getInventory(b).getItemInSlot(slot == getInputSlots()[0] ? getInputSlots()[1]: getInputSlots()[0]);
|
||||
ItemStack item = BlockStorage.getInventory(b).getItemInSlot(slot);
|
||||
ItemStack target = menu.getItemInSlot(slot == getInputSlots()[0] ? getInputSlots()[1]: getInputSlots()[0]);
|
||||
ItemStack item = menu.getItemInSlot(slot);
|
||||
|
||||
// Check if disenchantable
|
||||
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(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 (!fits(b, r.getOutput())) return;
|
||||
if (recipe != null) {
|
||||
if (!fits(b, recipe.getOutput())) return;
|
||||
|
||||
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.Slimefun;
|
||||
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
||||
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
|
||||
|
||||
public class AutoEnchanter extends AContainer {
|
||||
|
||||
@ -88,15 +89,16 @@ public class AutoEnchanter extends AContainer {
|
||||
}
|
||||
}
|
||||
else {
|
||||
MachineRecipe r = null;
|
||||
slots:
|
||||
BlockMenu menu = BlockStorage.getInventory(b.getLocation());
|
||||
MachineRecipe recipe = null;
|
||||
|
||||
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
|
||||
SlimefunItem sfTarget = SlimefunItem.getByItem(target);
|
||||
if(sfTarget != null && !sfTarget.isEnchantable()) return;
|
||||
|
||||
ItemStack item = BlockStorage.getInventory(b).getItemInSlot(slot);
|
||||
ItemStack item = menu.getItemInSlot(slot);
|
||||
|
||||
// Enchant
|
||||
if (item != null && item.getType() == Material.ENCHANTED_BOOK && target != null) {
|
||||
@ -105,12 +107,14 @@ public class AutoEnchanter extends AContainer {
|
||||
int amount = 0;
|
||||
int special_amount = 0;
|
||||
EnchantmentStorageMeta meta = (EnchantmentStorageMeta) item.getItemMeta();
|
||||
|
||||
for (Map.Entry<Enchantment, Integer> e: meta.getStoredEnchants().entrySet()) {
|
||||
if (e.getKey().canEnchantItem(target)) {
|
||||
amount++;
|
||||
enchantments.put(e.getKey(), e.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
if (Slimefun.isEmeraldEnchantsInstalled()) {
|
||||
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()) {
|
||||
@ -121,27 +125,32 @@ public class AutoEnchanter extends AContainer {
|
||||
}
|
||||
special_amount += EmeraldEnchants.getInstance().getRegistry().getEnchantments(target).size();
|
||||
}
|
||||
|
||||
if (amount > 0 && special_amount <= SlimefunStartup.instance.getSettings().EMERALD_ENCHANTS_LIMIT) {
|
||||
ItemStack newItem = target.clone();
|
||||
for (Map.Entry<Enchantment, Integer> e: enchantments.entrySet()) {
|
||||
newItem.addUnsafeEnchantment(e.getKey(), e.getValue());
|
||||
}
|
||||
|
||||
for (ItemEnchantment e: enchantments2) {
|
||||
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 (!fits(b, r.getOutput())) return;
|
||||
if (recipe != null) {
|
||||
if (!fits(b, recipe.getOutput())) return;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void uniqueTick() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSynchronized() {
|
||||
return false;
|
||||
|
@ -131,32 +131,7 @@ public abstract class CropGrowthAccelerator extends SlimefunItem {
|
||||
}
|
||||
|
||||
protected void tick(Block b) throws Exception {
|
||||
int work = 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) {
|
||||
if (work(b) > 0) {
|
||||
for (int slot : getInputSlots()) {
|
||||
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.FERTILIZER, false)) {
|
||||
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);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void uniqueTick() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSynchronized() {
|
||||
return false;
|
||||
@ -148,6 +144,7 @@ public abstract class HeatedPressureChamber extends AContainer {
|
||||
protected void tick(Block b) {
|
||||
if (isProcessing(b)) {
|
||||
int timeleft = progress.get(b);
|
||||
|
||||
if (timeleft > 0) {
|
||||
ItemStack item = getProgressBar().clone();
|
||||
ItemMeta im = item.getItemMeta();
|
||||
@ -178,37 +175,42 @@ public abstract class HeatedPressureChamber extends AContainer {
|
||||
}
|
||||
}
|
||||
else {
|
||||
MachineRecipe r = null;
|
||||
BlockMenu menu = BlockStorage.getInventory(b.getLocation());
|
||||
Map<Integer, Integer> found = new HashMap<>();
|
||||
MachineRecipe recipe = findRecipe(menu, found);
|
||||
|
||||
for (MachineRecipe recipe: recipes) {
|
||||
for (ItemStack input: recipe.getInput()) {
|
||||
slots:
|
||||
for (int slot: getInputSlots()) {
|
||||
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), input, true)) {
|
||||
found.put(slot, input.getAmount());
|
||||
break slots;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (found.size() == recipe.getInput().length) {
|
||||
r = recipe;
|
||||
break;
|
||||
}
|
||||
else found.clear();
|
||||
}
|
||||
|
||||
if (r != null) {
|
||||
if (!fits(b, r.getOutput())) return;
|
||||
if (recipe != null) {
|
||||
if (!fits(b, recipe.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()));
|
||||
menu.replaceExistingItem(entry.getKey(), InvUtils.decreaseItem(menu.getItemInSlot(entry.getKey()), entry.getValue()));
|
||||
}
|
||||
processing.put(b, r);
|
||||
progress.put(b, r.getTicks());
|
||||
|
||||
processing.put(b, recipe);
|
||||
progress.put(b, recipe.getTicks());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private MachineRecipe findRecipe(BlockMenu menu, Map<Integer, Integer> found) {
|
||||
for (MachineRecipe recipe: recipes) {
|
||||
for (ItemStack input: recipe.getInput()) {
|
||||
for (int slot: getInputSlots()) {
|
||||
if (SlimefunManager.isItemSimiliar(menu.getItemInSlot(slot), input, true)) {
|
||||
found.put(slot, input.getAmount());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (found.size() == recipe.getInput().length) {
|
||||
return recipe;
|
||||
}
|
||||
else found.clear();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMachineIdentifier() {
|
||||
return "HEATED_PRESSURE_CHAMBER";
|
||||
|
@ -1315,10 +1315,6 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
|
||||
if (b != null) ProgrammableAndroid.this.tick(b);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void uniqueTick() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSynchronized() {
|
||||
return true;
|
||||
|
@ -73,7 +73,6 @@ public class TickerTask implements Runnable {
|
||||
long timestamp2 = System.currentTimeMillis();
|
||||
chunks++;
|
||||
|
||||
blocks:
|
||||
for (final Location l: BlockStorage.getTickingLocations(c)) {
|
||||
if (l.getWorld().isChunkLoaded(l.getBlockX() >> 4, l.getBlockZ() >> 4)) {
|
||||
final Block b = l.getBlock();
|
||||
@ -178,7 +177,7 @@ public class TickerTask implements Runnable {
|
||||
skipped += BlockStorage.getTickingLocations(c).size();
|
||||
chunksSkipped.add(c);
|
||||
chunks--;
|
||||
break blocks;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -255,26 +255,25 @@ public class CargoNet extends Network {
|
||||
BlockMenu menu = BlockStorage.getInventory(request.getTerminal());
|
||||
|
||||
switch (request.getDirection()) {
|
||||
case INSERT: {
|
||||
ItemStack stack = request.getItem();
|
||||
nodes:
|
||||
case INSERT:
|
||||
ItemStack requestedItem = request.getItem();
|
||||
|
||||
for (Location l: destinations) {
|
||||
Block target = getAttachedBlock(l.getBlock());
|
||||
stack = CargoManager.insert(l.getBlock(), storage, target, stack, -1);
|
||||
if (stack == null) {
|
||||
requestedItem = CargoManager.insert(l.getBlock(), storage, target, requestedItem, -1);
|
||||
if (requestedItem == null) {
|
||||
menu.replaceExistingItem(request.getSlot(), null);
|
||||
break nodes;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (stack != null) {
|
||||
menu.replaceExistingItem(request.getSlot(), stack);
|
||||
if (requestedItem != null) {
|
||||
menu.replaceExistingItem(request.getSlot(), requestedItem);
|
||||
}
|
||||
|
||||
iterator.remove();
|
||||
break;
|
||||
}
|
||||
case WITHDRAW: {
|
||||
case WITHDRAW:
|
||||
int slot = request.getSlot();
|
||||
ItemStack prevStack = menu.getItemInSlot(slot);
|
||||
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 requested = request.getItem();
|
||||
nodes:
|
||||
|
||||
for (Location l : providers) {
|
||||
Block target = getAttachedBlock(l.getBlock());
|
||||
ItemStack is = CargoManager.withdraw(l.getBlock(), storage, target, requested);
|
||||
@ -297,7 +296,7 @@ public class CargoNet extends Network {
|
||||
}
|
||||
|
||||
if (is.getAmount() == requested.getAmount()) {
|
||||
break nodes;
|
||||
break;
|
||||
}
|
||||
else {
|
||||
requested = new CustomItem(requested, requested.getAmount() - is.getAmount());
|
||||
@ -314,20 +313,20 @@ public class CargoNet extends Network {
|
||||
|
||||
iterator.remove();
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// All operations happen here: Everything gets iterated from the Input Nodes. (Apart from ChestTerminal Buses)
|
||||
for (Location input: inputNodes) {
|
||||
Integer frequency = getFrequency(input);
|
||||
|
||||
if (frequency < 0 || frequency > 15) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Block inputTarget = getAttachedBlock(input.getBlock());
|
||||
ItemStack stack = null;
|
||||
int previousSlot = -1;
|
||||
@ -364,13 +363,12 @@ public class CargoNet extends Network {
|
||||
|
||||
round_robin.put(input, c_index);
|
||||
}
|
||||
|
||||
destinations:
|
||||
|
||||
for (Location out : outputlist) {
|
||||
Block target = getAttachedBlock(out.getBlock());
|
||||
if (target != null) {
|
||||
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