1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-19 19:25:48 +00:00

Reduced technical debt

This commit is contained in:
TheBusyBiscuit 2020-06-16 15:40:05 +02:00
parent e82acc0b3c
commit f0b5d55c48

View File

@ -5,6 +5,7 @@ import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
@ -233,47 +234,7 @@ abstract class ChestTerminalNetwork extends Network {
} }
protected void updateTerminals(Set<Location> providers) { protected void updateTerminals(Set<Location> providers) {
List<ItemStackAndInteger> items = new ArrayList<>(); List<ItemStackAndInteger> items = findAvailableItems(providers);
for (Location l : providers) {
Optional<Block> block = getAttachedBlock(l.getBlock());
if (block.isPresent()) {
Block target = block.get();
UniversalBlockMenu menu = BlockStorage.getUniversalInventory(target);
if (menu != null) {
for (int slot : menu.getPreset().getSlotsAccessedByItemTransport((DirtyChestMenu) menu, ItemTransportFlow.WITHDRAW, null)) {
ItemStack is = menu.getItemInSlot(slot);
filter(is, items, l);
}
}
else if (BlockStorage.hasInventory(target)) {
BlockMenu blockMenu = BlockStorage.getInventory(target);
Config cfg = BlockStorage.getLocationInfo(target.getLocation());
if (cfg.getString("id").startsWith("BARREL_") && cfg.getString("storedItems") != null) {
gatherItemsFromBarrel(l, cfg, blockMenu, items);
}
else {
handleWithdraw(blockMenu, items, l);
}
}
else if (CargoUtils.hasInventory(target)) {
BlockState state = target.getState();
if (state instanceof InventoryHolder) {
Inventory inv = ((InventoryHolder) state).getInventory();
for (ItemStack is : inv.getContents()) {
filter(is, items, l);
}
}
}
}
}
Collections.sort(items, Comparator.comparingInt(item -> -item.getInt()));
for (Location l : terminals) { for (Location l : terminals) {
BlockMenu menu = BlockStorage.getInventory(l); BlockMenu menu = BlockStorage.getInventory(l);
@ -322,6 +283,51 @@ abstract class ChestTerminalNetwork extends Network {
} }
} }
private List<ItemStackAndInteger> findAvailableItems(Set<Location> providers) {
List<ItemStackAndInteger> items = new LinkedList<>();
for (Location l : providers) {
Optional<Block> block = getAttachedBlock(l.getBlock());
if (block.isPresent()) {
Block target = block.get();
UniversalBlockMenu menu = BlockStorage.getUniversalInventory(target);
if (menu != null) {
for (int slot : menu.getPreset().getSlotsAccessedByItemTransport((DirtyChestMenu) menu, ItemTransportFlow.WITHDRAW, null)) {
ItemStack is = menu.getItemInSlot(slot);
filter(is, items, l);
}
}
else if (BlockStorage.hasInventory(target)) {
BlockMenu blockMenu = BlockStorage.getInventory(target);
Config cfg = BlockStorage.getLocationInfo(target.getLocation());
if (cfg.getString("id").startsWith("BARREL_") && cfg.getString("storedItems") != null) {
gatherItemsFromBarrel(l, cfg, blockMenu, items);
}
else {
handleWithdraw(blockMenu, items, l);
}
}
else if (CargoUtils.hasInventory(target)) {
BlockState state = target.getState();
if (state instanceof InventoryHolder) {
Inventory inv = ((InventoryHolder) state).getInventory();
for (ItemStack is : inv.getContents()) {
filter(is, items, l);
}
}
}
}
}
Collections.sort(items, Comparator.comparingInt(item -> -item.getInt()));
return items;
}
private void gatherItemsFromBarrel(Location l, Config cfg, BlockMenu blockMenu, List<ItemStackAndInteger> items) { private void gatherItemsFromBarrel(Location l, Config cfg, BlockMenu blockMenu, List<ItemStackAndInteger> items) {
int stored = Integer.parseInt(cfg.getString("storedItems")); int stored = Integer.parseInt(cfg.getString("storedItems"));