Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,15 @@
import io.github.pylonmc.pylon.core.block.base.PylonBreakHandler;
import io.github.pylonmc.pylon.core.block.base.PylonEntityHolderBlock;
import io.github.pylonmc.pylon.core.block.base.PylonInteractBlock;
import io.github.pylonmc.pylon.core.block.base.PylonLogisticBlock;
import io.github.pylonmc.pylon.core.block.context.BlockBreakContext;
import io.github.pylonmc.pylon.core.block.context.BlockCreateContext;
import io.github.pylonmc.pylon.core.datatypes.PylonSerializers;
import io.github.pylonmc.pylon.core.entity.EntityStorage;
import io.github.pylonmc.pylon.core.entity.display.ItemDisplayBuilder;
import io.github.pylonmc.pylon.core.entity.display.transform.TransformBuilder;
import io.github.pylonmc.pylon.core.logistics.LogisticGroupType;
import io.github.pylonmc.pylon.core.logistics.slot.ItemDisplayLogisticSlot;
import org.bukkit.NamespacedKey;
import org.bukkit.block.Block;
import org.bukkit.entity.ItemDisplay;
Expand All @@ -24,7 +28,11 @@
import static io.github.pylonmc.pylon.base.util.BaseUtils.baseKey;
import static java.lang.Math.PI;

public class Pedestal extends PylonBlock implements PylonEntityHolderBlock, PylonInteractBlock, PylonBreakHandler {
public class Pedestal extends PylonBlock implements
PylonEntityHolderBlock,
PylonInteractBlock,
PylonBreakHandler,
PylonLogisticBlock {

private static final NamespacedKey ROTATION_KEY = baseKey("rotation");
private static final NamespacedKey LOCKED_KEY = baseKey("locked");
Expand All @@ -51,7 +59,12 @@ public Pedestal(@NotNull Block block, @NotNull PersistentDataContainer pdc) {
rotation = pdc.get(ROTATION_KEY, PylonSerializers.DOUBLE);
locked = pdc.get(LOCKED_KEY, PylonSerializers.BOOLEAN);
}


@Override
public void postInitialise() {
createLogisticGroup("inventory", LogisticGroupType.BOTH, new ItemDisplayLogisticSlot(getItemDisplay()));
}

@Override
public void write(@NotNull PersistentDataContainer pdc) {
pdc.set(ROTATION_KEY, PylonSerializers.DOUBLE, rotation);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import io.github.pylonmc.pylon.core.block.base.PylonGuiBlock;
import io.github.pylonmc.pylon.core.block.base.PylonLogisticBlock;
import io.github.pylonmc.pylon.core.block.context.BlockCreateContext;
import io.github.pylonmc.pylon.core.logistics.LogisticSlotType;
import io.github.pylonmc.pylon.core.logistics.LogisticGroupType;
import io.github.pylonmc.pylon.core.util.gui.GuiItems;
import org.bukkit.block.Block;
import org.bukkit.persistence.PersistentDataContainer;
Expand All @@ -26,7 +26,7 @@ public ItemInputHatch(@NotNull Block block, @NotNull PersistentDataContainer pdc

@Override
public void postInitialise() {
createLogisticGroup("input", LogisticSlotType.INPUT, inventory);
createLogisticGroup("input", LogisticGroupType.INPUT, inventory);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import io.github.pylonmc.pylon.core.block.base.PylonGuiBlock;
import io.github.pylonmc.pylon.core.block.base.PylonLogisticBlock;
import io.github.pylonmc.pylon.core.block.context.BlockCreateContext;
import io.github.pylonmc.pylon.core.logistics.LogisticSlotType;
import io.github.pylonmc.pylon.core.logistics.LogisticGroupType;
import io.github.pylonmc.pylon.core.util.gui.GuiItems;
import org.bukkit.block.Block;
import org.bukkit.persistence.PersistentDataContainer;
Expand All @@ -26,7 +26,7 @@ public ItemOutputHatch(@NotNull Block block, @NotNull PersistentDataContainer pd

@Override
public void postInitialise() {
createLogisticGroup("output", LogisticSlotType.OUTPUT, inventory);
createLogisticGroup("output", LogisticGroupType.OUTPUT, inventory);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
import io.github.pylonmc.pylon.core.i18n.PylonArgument;
import io.github.pylonmc.pylon.core.item.PylonItem;
import io.github.pylonmc.pylon.core.item.builder.ItemStackBuilder;
import io.github.pylonmc.pylon.core.logistics.LogisticSlotType;
import io.github.pylonmc.pylon.core.logistics.VirtualInventoryLogisticSlot;
import io.github.pylonmc.pylon.core.logistics.LogisticGroupType;
import io.github.pylonmc.pylon.core.logistics.slot.VirtualInventoryLogisticSlot;
import io.github.pylonmc.pylon.core.util.gui.GuiItems;
import io.github.pylonmc.pylon.core.util.gui.unit.UnitFormat;
import org.bukkit.Material;
Expand Down Expand Up @@ -140,7 +140,7 @@ public CargoBuffer(@NotNull Block block, @NotNull PersistentDataContainer pdc) {

@Override
public void postInitialise() {
createLogisticGroup("input", LogisticSlotType.INPUT, new VirtualInventoryLogisticSlot(inventory, 0));
createLogisticGroup("output", LogisticSlotType.OUTPUT, new VirtualInventoryLogisticSlot(inventory, 0));
createLogisticGroup("input", LogisticGroupType.INPUT, new VirtualInventoryLogisticSlot(inventory, 0));
createLogisticGroup("output", LogisticGroupType.OUTPUT, new VirtualInventoryLogisticSlot(inventory, 0));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import com.google.common.base.Preconditions;
import io.github.pylonmc.pylon.base.util.BaseUtils;
import io.github.pylonmc.pylon.core.block.BlockStorage;
import io.github.pylonmc.pylon.core.block.PylonBlock;
import io.github.pylonmc.pylon.core.block.base.*;
import io.github.pylonmc.pylon.core.block.context.BlockCreateContext;
import io.github.pylonmc.pylon.core.config.adapter.ConfigAdapter;
Expand All @@ -17,8 +16,8 @@
import io.github.pylonmc.pylon.core.item.PylonItem;
import io.github.pylonmc.pylon.core.item.builder.ItemStackBuilder;
import io.github.pylonmc.pylon.core.logistics.LogisticGroup;
import io.github.pylonmc.pylon.core.logistics.LogisticSlot;
import io.github.pylonmc.pylon.core.logistics.LogisticSlotType;
import io.github.pylonmc.pylon.core.logistics.slot.LogisticSlot;
import io.github.pylonmc.pylon.core.logistics.LogisticGroupType;
import io.github.pylonmc.pylon.core.util.MachineUpdateReason;
import io.github.pylonmc.pylon.core.util.PylonUtils;
import io.github.pylonmc.pylon.core.util.gui.GuiItems;
Expand All @@ -34,7 +33,6 @@
import org.bukkit.inventory.ItemStack;
import org.bukkit.persistence.PersistentDataContainer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import xyz.xenondevs.invui.gui.Gui;
import xyz.xenondevs.invui.inventory.VirtualInventory;
import xyz.xenondevs.invui.item.ItemProvider;
Expand All @@ -43,24 +41,13 @@
import java.util.*;


public class CargoExtractor extends PylonBlock implements
PylonDirectionalBlock,
public class CargoExtractor extends CargoInteractor implements
PylonCargoBlock,
PylonEntityHolderBlock,
PylonGuiBlock,
PylonTickingBlock {
PylonTickingBlock,
PylonGuiBlock {

public static final NamespacedKey TARGET_LOGISTIC_GROUP_KEY = BaseUtils.baseKey("target_logistic_group");
public static final NamespacedKey ITEMS_TO_FILTER_KEY = BaseUtils.baseKey("items_to_filter");
public static final NamespacedKey IS_WHITELIST_KEY = BaseUtils.baseKey("is_whitelist");
public static final List<Material> groupMaterials = List.of(
Material.LIGHT_BLUE_CONCRETE,
Material.CYAN_CONCRETE,
Material.BLUE_CONCRETE,
Material.PURPLE_CONCRETE,
Material.MAGENTA_CONCRETE,
Material.PINK_CONCRETE
);

public final int transferRate = getSettings().getOrThrow("transfer-rate", ConfigAdapter.INT);

Expand All @@ -77,7 +64,6 @@ public class CargoExtractor extends PylonBlock implements
private final VirtualInventory outputInventory = new VirtualInventory(1);
private final VirtualInventory filterInventory = new VirtualInventory(5);

public @Nullable String targetLogisticGroup = null;
public Set<ItemStack> itemsToFilter = new HashSet<>();
public boolean isWhitelist = false;

Expand Down Expand Up @@ -120,60 +106,10 @@ public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @N
}
}

public class InventoryCycleItem extends AbstractItem {

@Override
public ItemProvider getItemProvider() {
PylonLogisticBlock logisticBlock = getTargetLogisticBlock();
if (targetLogisticGroup == null || logisticBlock == null) {
return ItemStackBuilder.of(Material.BARRIER)
.name("pylon.pylonbase.gui.no-target-logistic-group");
}

List<String> availableGroups = getAvailableLogisticGroups();
availableGroups.sort(String::compareTo);

int index = availableGroups.indexOf(targetLogisticGroup);
Preconditions.checkState(index != -1);
Material material = groupMaterials.get(index % groupMaterials.size());

PylonBlock pylonBlock = BlockStorage.get(logisticBlock.getBlock());
Preconditions.checkState(pylonBlock != null);

ItemStackBuilder builder = ItemStackBuilder.gui(material, "logistic-group:" + index)
.name(Component.translatable("pylon.pylonbase.gui.logistic-group-cycle-item.name")
.arguments(PylonArgument.of(
"inventory",
Component.translatable("pylon." + pylonBlock.getKey().getNamespace() + ".inventory." + targetLogisticGroup)
))
);
if (availableGroups.size() > 1) {
builder.lore(Component.translatable("pylon.pylonbase.gui.logistic-group-cycle-item.lore"));
}
return builder;
}

@Override
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
PylonLogisticBlock logisticBlock = getTargetLogisticBlock();
if (targetLogisticGroup == null || logisticBlock == null) {
return;
}

List<String> availableGroups = getAvailableLogisticGroups();
availableGroups.sort(String::compareTo);

int index = availableGroups.indexOf(targetLogisticGroup);
targetLogisticGroup = availableGroups.get((index + 1) % availableGroups.size());
notifyWindows();
}
}

@SuppressWarnings("unused")
public CargoExtractor(@NotNull Block block, @NotNull BlockCreateContext context) {
super(block, context);

setFacing(context.getFacing());
setTickInterval(transferRate * 20);

addCargoLogisticGroup(getFacing(), "output");
Expand Down Expand Up @@ -216,21 +152,20 @@ public CargoExtractor(@NotNull Block block, @NotNull BlockCreateContext context)
@SuppressWarnings("unused")
public CargoExtractor(@NotNull Block block, @NotNull PersistentDataContainer pdc) {
super(block, pdc);
targetLogisticGroup = pdc.get(TARGET_LOGISTIC_GROUP_KEY, PylonSerializers.STRING);
itemsToFilter = pdc.get(ITEMS_TO_FILTER_KEY, PylonSerializers.SET.setTypeFrom(PylonSerializers.ITEM_STACK));
isWhitelist = pdc.get(IS_WHITELIST_KEY, PylonSerializers.BOOLEAN);
}

@Override
public void write(@NotNull PersistentDataContainer pdc) {
PylonUtils.setNullable(pdc, TARGET_LOGISTIC_GROUP_KEY, PylonSerializers.STRING, targetLogisticGroup);
super.write(pdc);
pdc.set(ITEMS_TO_FILTER_KEY, PylonSerializers.SET.setTypeFrom(PylonSerializers.ITEM_STACK), itemsToFilter);
pdc.set(IS_WHITELIST_KEY, PylonSerializers.BOOLEAN, isWhitelist);
}

@Override
public void postInitialise() {
createLogisticGroup("output", LogisticSlotType.OUTPUT, outputInventory);
createLogisticGroup("output", LogisticGroupType.OUTPUT, outputInventory);

filterInventory.setPostUpdateHandler(event -> {
itemsToFilter.clear();
Expand Down Expand Up @@ -268,12 +203,6 @@ public void onDuctDisconnected(@NotNull PylonCargoDisconnectEvent event) {
}
}

public @Nullable PylonLogisticBlock getTargetLogisticBlock() {
Block block = getBlock().getRelative(getFacing().getOppositeFace());
PylonLogisticBlock pylonBlock = BlockStorage.getAs(PylonLogisticBlock.class, block);
return pylonBlock instanceof PylonCargoBlock ? null : pylonBlock;
}

@Override
public @NotNull Gui createGui() {
return Gui.normal()
Expand All @@ -297,20 +226,11 @@ public void onDuctDisconnected(@NotNull PylonCargoDisconnectEvent event) {

@Override
public void tick() {
PylonLogisticBlock target = getTargetLogisticBlock();
if (target == null) {
if (targetLogisticGroup == null) {
return;
}

if (targetLogisticGroup == null || target.getLogisticGroup(targetLogisticGroup) == null) {
List<String> availableLogisticGroups = getAvailableLogisticGroups();
if (availableLogisticGroups.isEmpty()) {
return;
}
targetLogisticGroup = availableLogisticGroups.getFirst();
}

LogisticGroup group = target.getLogisticGroup(targetLogisticGroup);
LogisticGroup group = targetGroups.get(targetLogisticGroup);
Preconditions.checkState(group != null);
ItemStack output = outputInventory.getItem(0);
if (output != null && output.getAmount() == output.getMaxStackSize()) {
Expand All @@ -323,7 +243,7 @@ public void tick() {
continue;
}

if ((isWhitelist && !itemsToFilter.contains(slotStack.asOne())) || (!isWhitelist && itemsToFilter.contains(slotStack.asOne()))) {
if (isWhitelist != itemsToFilter.contains(slotStack.asOne())) {
continue;
}

Expand All @@ -337,20 +257,8 @@ public void tick() {
}
}

private @NotNull List<String> getAvailableLogisticGroups() {
PylonLogisticBlock target = getTargetLogisticBlock();
if (target == null) {
return List.of();
}

List<String> availableLogisticGroups = new ArrayList<>();
for (Map.Entry<String, LogisticGroup> entry : target.getLogisticGroups().entrySet()) {
if (entry.getValue().getSlotType() == LogisticSlotType.BOTH
|| entry.getValue().getSlotType() == LogisticSlotType.OUTPUT
) {
availableLogisticGroups.add(entry.getKey());
}
}
return availableLogisticGroups;
@Override
public boolean isValidGroup(@NotNull LogisticGroup group) {
return group.getSlotType() == LogisticGroupType.BOTH || group.getSlotType() == LogisticGroupType.OUTPUT;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
import io.github.pylonmc.pylon.core.i18n.PylonArgument;
import io.github.pylonmc.pylon.core.item.PylonItem;
import io.github.pylonmc.pylon.core.item.builder.ItemStackBuilder;
import io.github.pylonmc.pylon.core.logistics.LogisticSlotType;
import io.github.pylonmc.pylon.core.logistics.VirtualInventoryLogisticSlot;
import io.github.pylonmc.pylon.core.logistics.LogisticGroupType;
import io.github.pylonmc.pylon.core.logistics.slot.VirtualInventoryLogisticSlot;
import io.github.pylonmc.pylon.core.util.MachineUpdateReason;
import io.github.pylonmc.pylon.core.util.PylonUtils;
import io.github.pylonmc.pylon.core.util.gui.GuiItems;
Expand Down Expand Up @@ -179,9 +179,9 @@ public CargoFilter(@NotNull Block block, @NotNull PersistentDataContainer pdc) {

@Override
public void postInitialise() {
createLogisticGroup("input", LogisticSlotType.INPUT, new VirtualInventoryLogisticSlot(inputInventory, 0));
createLogisticGroup("filtered", LogisticSlotType.OUTPUT, new VirtualInventoryLogisticSlot(filteredInventory, 0));
createLogisticGroup("unfiltered", LogisticSlotType.OUTPUT, new VirtualInventoryLogisticSlot(unfilteredInventory, 0));
createLogisticGroup("input", LogisticGroupType.INPUT, new VirtualInventoryLogisticSlot(inputInventory, 0));
createLogisticGroup("filtered", LogisticGroupType.OUTPUT, new VirtualInventoryLogisticSlot(filteredInventory, 0));
createLogisticGroup("unfiltered", LogisticGroupType.OUTPUT, new VirtualInventoryLogisticSlot(unfilteredInventory, 0));
inputInventory.setPostUpdateHandler(event -> {
if (!(event.getUpdateReason() instanceof MachineUpdateReason)) {
doSplit();
Expand Down
Loading