mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-11-10 20:11:35 +01:00
Mechanical Arm Round Robin
- added a scroll option to the arm that enables round robin for in- and output
This commit is contained in:
parent
6cf36e47bf
commit
53e0c61da7
13 changed files with 191 additions and 45 deletions
|
@ -130,7 +130,7 @@ de8a40b7daf1497d5aecee47a43b3e0b1d030b00 assets/create/blockstates/fancy_scoria_
|
|||
fc9ac0a7e7191b93516719455a17177fa6524ecc assets/create/blockstates/fancy_weathered_limestone_bricks_slab.json
|
||||
b2a7c321b1795f20e7433f81a55ce4683de081b8 assets/create/blockstates/fancy_weathered_limestone_bricks_stairs.json
|
||||
6372fe02ba0065acb0758121c45a15a1a8fdc5de assets/create/blockstates/fancy_weathered_limestone_bricks_wall.json
|
||||
fe9169716dd21a81a3710a89f0a9b7ea4dcd4d51 assets/create/blockstates/fluid_pipe.json
|
||||
d96007df2f19d5af2924dce680ae9bc960a2e6da assets/create/blockstates/fluid_pipe.json
|
||||
f0eaab18e16c4f3f65ebf3b55b08f0dc445720fe assets/create/blockstates/fluid_tank.json
|
||||
e9da1794b6ece7f9aa8bcb43d42c23a55446133b assets/create/blockstates/flywheel.json
|
||||
ac00d40e1ef50a37041c0481afa1a23a14dea78e assets/create/blockstates/framed_glass.json
|
||||
|
@ -303,7 +303,7 @@ e8b0a401c10d1ba67ed71ba31bd5f9bc28571b65 assets/create/blockstates/powered_toggl
|
|||
3a739f9d4276828d83f2d2750bf3227c87bcd438 assets/create/blockstates/pulley_magnet.json
|
||||
469e430d96cb0a5e1aaf6b7cc5d401d488c9e600 assets/create/blockstates/pulse_repeater.json
|
||||
92957119abd5fbcca36a113b2a80255fd70fc303 assets/create/blockstates/purple_seat.json
|
||||
8d7e653bfd9846e684a0d3725595714a19201017 assets/create/blockstates/radial_chassis.json
|
||||
4439fc83a8c7370ab44b211a3fd48abde20a4728 assets/create/blockstates/radial_chassis.json
|
||||
da1b08387af7afa0855ee8d040f620c01f20660a assets/create/blockstates/red_seat.json
|
||||
8929677f2cc5354aa19ef182af69f9f0b41eb242 assets/create/blockstates/redstone_contact.json
|
||||
c29213b77ac0c78d8979c5f6188d2b265696f9b9 assets/create/blockstates/redstone_link.json
|
||||
|
@ -361,16 +361,16 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j
|
|||
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
|
||||
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
||||
1fe3d6fb515b8951750daf6ff274006e14c96b32 assets/create/lang/en_ud.json
|
||||
5854ea893224d4c8f316055fe351bc901663b7c5 assets/create/lang/en_us.json
|
||||
a72da7a232cf1fde241a6bfa1625aa16437dcf55 assets/create/lang/unfinished/de_de.json
|
||||
ba2b39cb59687f0baa78355f6adff30faf3306de assets/create/lang/unfinished/fr_fr.json
|
||||
f15f964d19eaf33c29f31daf7349c182183e6615 assets/create/lang/unfinished/it_it.json
|
||||
1ada6540b9cefe1421b59b62d7908d798576f2d1 assets/create/lang/unfinished/ja_jp.json
|
||||
38a726b5442a0cff2ca85d82244046a29e2f7ab8 assets/create/lang/unfinished/ko_kr.json
|
||||
b7adfb420ffca283f8d1dbbe5f0cd48ee5e159c1 assets/create/lang/unfinished/nl_nl.json
|
||||
4996a7078d8fec5c02faae83f831b626cf8edf29 assets/create/lang/unfinished/pt_br.json
|
||||
461a3ded936c9a53df319f09313e94cf35c53baf assets/create/lang/unfinished/ru_ru.json
|
||||
02de79ff2a8762bbeed85cfacf6e9174b951634c assets/create/lang/unfinished/zh_cn.json
|
||||
78132f4ad6bb368cfede5759614a51996642dbaf assets/create/lang/en_us.json
|
||||
89e41a7841615a8600e0c9875dbbf8102116bc54 assets/create/lang/unfinished/de_de.json
|
||||
12b8c64ebfa1e9616db6ffd6dd7f702bb6b7d286 assets/create/lang/unfinished/fr_fr.json
|
||||
b6b65233c4c85abc1a32f3dbc079993cbb6184c7 assets/create/lang/unfinished/it_it.json
|
||||
d5c762f5a17d4736db53d4001ad4431e76bb3387 assets/create/lang/unfinished/ja_jp.json
|
||||
885a0593c22386cf88d9f221ef08883a02ec589b assets/create/lang/unfinished/ko_kr.json
|
||||
da888d1e22b0a191770fdf39e0221c956fa274fb assets/create/lang/unfinished/nl_nl.json
|
||||
bf72f08cae43a08d4fb729a82a7470e33146e6c7 assets/create/lang/unfinished/pt_br.json
|
||||
a9c15400e799bad4fb74b897e1be8b6bfc74ea69 assets/create/lang/unfinished/ru_ru.json
|
||||
bc857a89d28460d79f67c6f10358455434faecf0 assets/create/lang/unfinished/zh_cn.json
|
||||
846200eb548d3bfa2e77b41039de159b4b6cfb45 assets/create/models/block/acacia_window.json
|
||||
1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets/create/models/block/acacia_window_pane_noside.json
|
||||
1763ea2c9b981d187f5031ba608f3d5d3be3986a assets/create/models/block/acacia_window_pane_noside_alt.json
|
||||
|
|
|
@ -848,6 +848,11 @@
|
|||
|
||||
"create.mechanical_mixer.min_ingredients": "Min. Ingredients",
|
||||
|
||||
"create.mechanical_arm.selection_mode": "Selection Mode",
|
||||
"create.mechanical_arm.selection_mode.default": "First Valid Target",
|
||||
"create.mechanical_arm.selection_mode.round_robin_soft": "Attempt Round Robin",
|
||||
"create.mechanical_arm.selection_mode.round_robin_hard": "Enforce Round Robin",
|
||||
|
||||
"create.gui.config.overlay1": "Hi :)",
|
||||
"create.gui.config.overlay2": "This is a sample overlay",
|
||||
"create.gui.config.overlay3": "Click or drag with your mouse",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 817",
|
||||
"_": "Missing Localizations: 821",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -849,6 +849,11 @@
|
|||
|
||||
"create.mechanical_mixer.min_ingredients": "UNLOCALIZED: Min. Ingredients",
|
||||
|
||||
"create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode",
|
||||
"create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target",
|
||||
"create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin",
|
||||
"create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin",
|
||||
|
||||
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
|
||||
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
|
||||
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 420",
|
||||
"_": "Missing Localizations: 424",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -849,6 +849,11 @@
|
|||
|
||||
"create.mechanical_mixer.min_ingredients": "Ingrédients min.",
|
||||
|
||||
"create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode",
|
||||
"create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target",
|
||||
"create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin",
|
||||
"create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin",
|
||||
|
||||
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
|
||||
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
|
||||
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 404",
|
||||
"_": "Missing Localizations: 408",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -849,6 +849,11 @@
|
|||
|
||||
"create.mechanical_mixer.min_ingredients": "Ingredienti Min.",
|
||||
|
||||
"create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode",
|
||||
"create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target",
|
||||
"create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin",
|
||||
"create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin",
|
||||
|
||||
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
|
||||
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
|
||||
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 399",
|
||||
"_": "Missing Localizations: 403",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -849,6 +849,11 @@
|
|||
|
||||
"create.mechanical_mixer.min_ingredients": "最小 材料",
|
||||
|
||||
"create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode",
|
||||
"create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target",
|
||||
"create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin",
|
||||
"create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin",
|
||||
|
||||
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
|
||||
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
|
||||
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 404",
|
||||
"_": "Missing Localizations: 408",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -849,6 +849,11 @@
|
|||
|
||||
"create.mechanical_mixer.min_ingredients": "최소 재료 종류",
|
||||
|
||||
"create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode",
|
||||
"create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target",
|
||||
"create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin",
|
||||
"create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin",
|
||||
|
||||
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
|
||||
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
|
||||
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 754",
|
||||
"_": "Missing Localizations: 758",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -849,6 +849,11 @@
|
|||
|
||||
"create.mechanical_mixer.min_ingredients": "Min. Ingredieënten",
|
||||
|
||||
"create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode",
|
||||
"create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target",
|
||||
"create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin",
|
||||
"create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin",
|
||||
|
||||
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
|
||||
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
|
||||
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 824",
|
||||
"_": "Missing Localizations: 828",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -849,6 +849,11 @@
|
|||
|
||||
"create.mechanical_mixer.min_ingredients": "UNLOCALIZED: Min. Ingredients",
|
||||
|
||||
"create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode",
|
||||
"create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target",
|
||||
"create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin",
|
||||
"create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin",
|
||||
|
||||
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
|
||||
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
|
||||
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 818",
|
||||
"_": "Missing Localizations: 822",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -849,6 +849,11 @@
|
|||
|
||||
"create.mechanical_mixer.min_ingredients": "UNLOCALIZED: Min. Ingredients",
|
||||
|
||||
"create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode",
|
||||
"create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target",
|
||||
"create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin",
|
||||
"create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin",
|
||||
|
||||
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
|
||||
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
|
||||
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 80",
|
||||
"_": "Missing Localizations: 84",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -849,6 +849,11 @@
|
|||
|
||||
"create.mechanical_mixer.min_ingredients": "最少物品种类数",
|
||||
|
||||
"create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode",
|
||||
"create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target",
|
||||
"create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin",
|
||||
"create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin",
|
||||
|
||||
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
|
||||
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
|
||||
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
package com.simibubi.create.content.logistics.block.mechanicalArm;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmInteractionPoint.Jukebox;
|
||||
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmInteractionPoint.Mode;
|
||||
import com.simibubi.create.foundation.advancement.AllTriggers;
|
||||
import com.simibubi.create.foundation.gui.AllIcons;
|
||||
import com.simibubi.create.foundation.gui.widgets.InterpolatedAngle;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.CenteredSideValueBoxTransform;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.INamedIconOptions;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollOptionBehaviour;
|
||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
import com.simibubi.create.foundation.utility.NBTHelper;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.JukeboxBlock;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
@ -20,9 +20,14 @@ import net.minecraft.nbt.CompoundNBT;
|
|||
import net.minecraft.nbt.INBT;
|
||||
import net.minecraft.nbt.ListNBT;
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraftforge.common.util.Constants.NBT;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class ArmTileEntity extends KineticTileEntity {
|
||||
|
||||
// Server
|
||||
|
@ -46,6 +51,11 @@ public class ArmTileEntity extends KineticTileEntity {
|
|||
float previousBaseAngle;
|
||||
boolean updateInteractionPoints;
|
||||
|
||||
//
|
||||
protected ScrollOptionBehaviour<SelectionMode> selectionMode;
|
||||
protected int lastInputIndex = -1;
|
||||
protected int lastOutputIndex = -1;
|
||||
|
||||
enum Phase {
|
||||
SEARCH_INPUTS, MOVE_TO_INPUT, SEARCH_OUTPUTS, MOVE_TO_OUTPUT, DANCING
|
||||
}
|
||||
|
@ -66,6 +76,18 @@ public class ArmTileEntity extends KineticTileEntity {
|
|||
updateInteractionPoints = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||
super.addBehaviours(behaviours);
|
||||
|
||||
selectionMode = new ScrollOptionBehaviour<>(SelectionMode.class, Lang.translate("mechanical_arm.selection_mode"), this,
|
||||
new CenteredSideValueBoxTransform((blockState, direction) -> {
|
||||
return direction != Direction.DOWN && direction != Direction.UP;
|
||||
}));
|
||||
selectionMode.requiresWrench();
|
||||
behaviours.add(selectionMode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
|
@ -163,37 +185,80 @@ public class ArmTileEntity extends KineticTileEntity {
|
|||
}
|
||||
|
||||
protected void searchForItem() {
|
||||
for (int index = 0; index < inputs.size(); index++) {
|
||||
ArmInteractionPoint armInteractionPoint = inputs.get(index);
|
||||
for (int i = 0; i < armInteractionPoint.getSlotCount(world); i++) {
|
||||
if (getDistributableAmount(armInteractionPoint, i) == 0)
|
||||
boolean foundInput = false;
|
||||
//for round robin, we start looking after the last used index, for default we start at 0;
|
||||
int startIndex = selectionMode.get() == SelectionMode.DEFAULT ? 0 : lastInputIndex + 1;
|
||||
|
||||
//if we enforce round robin, only look at the next input in the list, otherwise, look at all inputs
|
||||
int scanRange = selectionMode.get() == SelectionMode.ROUND_ROBIN_HARD ? lastInputIndex + 2 : inputs.size();
|
||||
if (scanRange > inputs.size())
|
||||
scanRange = inputs.size();
|
||||
|
||||
InteractionPoints: for (int i = startIndex; i < scanRange; i++) {
|
||||
ArmInteractionPoint armInteractionPoint = inputs.get(i);
|
||||
for (int j = 0; j < armInteractionPoint.getSlotCount(world); j++) {
|
||||
if (getDistributableAmount(armInteractionPoint, j) == 0)
|
||||
continue;
|
||||
|
||||
phase = Phase.MOVE_TO_INPUT;
|
||||
chasedPointIndex = index;
|
||||
chasedPointProgress = 0;
|
||||
sendData();
|
||||
markDirty();
|
||||
return;
|
||||
selectIndex(true, i);
|
||||
foundInput = true;
|
||||
break InteractionPoints;
|
||||
}
|
||||
}
|
||||
if (!foundInput && selectionMode.get() == SelectionMode.ROUND_ROBIN_SOFT) {
|
||||
//if we didn't find an input, but don't want to enforce round robin, reset the last index
|
||||
lastInputIndex = -1;
|
||||
}
|
||||
if (lastInputIndex == inputs.size() - 1) {
|
||||
//if we reached the last input in the list, reset the last index
|
||||
lastInputIndex = -1;
|
||||
}
|
||||
}
|
||||
|
||||
protected void searchForDestination() {
|
||||
ItemStack held = heldItem.copy();
|
||||
for (int index = 0; index < outputs.size(); index++) {
|
||||
ArmInteractionPoint armInteractionPoint = outputs.get(index);
|
||||
|
||||
boolean foundOutput = false;
|
||||
//for round robin, we start looking after the last used index, for default we start at 0;
|
||||
int startIndex = selectionMode.get() == SelectionMode.DEFAULT ? 0 : lastOutputIndex + 1;
|
||||
|
||||
//if we enforce round robin, only look at the next index in the list, otherwise, look at all
|
||||
int scanRange = selectionMode.get() == SelectionMode.ROUND_ROBIN_HARD ? lastOutputIndex + 2 : outputs.size();
|
||||
if (scanRange > outputs.size())
|
||||
scanRange = outputs.size();
|
||||
|
||||
for (int i = startIndex; i < scanRange; i++) {
|
||||
ArmInteractionPoint armInteractionPoint = outputs.get(i);
|
||||
ItemStack remainder = armInteractionPoint.insert(world, held, true);
|
||||
if (remainder.equals(heldItem, false))
|
||||
continue;
|
||||
|
||||
phase = Phase.MOVE_TO_OUTPUT;
|
||||
chasedPointIndex = index;
|
||||
chasedPointProgress = 0;
|
||||
sendData();
|
||||
markDirty();
|
||||
return;
|
||||
selectIndex(false, i);
|
||||
foundOutput = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!foundOutput && selectionMode.get() == SelectionMode.ROUND_ROBIN_SOFT) {
|
||||
//if we didn't find an input, but don't want to enforce round robin, reset the last index
|
||||
lastOutputIndex = -1;
|
||||
}
|
||||
if (lastOutputIndex == outputs.size() - 1) {
|
||||
//if we reached the last input in the list, reset the last index
|
||||
lastOutputIndex = -1;
|
||||
}
|
||||
}
|
||||
|
||||
//input == true => select input, false => select output
|
||||
private void selectIndex(boolean input, int index) {
|
||||
phase = input ? Phase.MOVE_TO_INPUT : Phase.MOVE_TO_OUTPUT;
|
||||
chasedPointIndex = index;
|
||||
chasedPointProgress = 0;
|
||||
if (input)
|
||||
lastInputIndex = index;
|
||||
else
|
||||
lastOutputIndex = index;
|
||||
sendData();
|
||||
markDirty();
|
||||
}
|
||||
|
||||
protected int getDistributableAmount(ArmInteractionPoint armInteractionPoint, int i) {
|
||||
|
@ -322,4 +387,30 @@ public class ArmTileEntity extends KineticTileEntity {
|
|||
}
|
||||
}
|
||||
|
||||
public enum SelectionMode implements INamedIconOptions {
|
||||
DEFAULT(AllIcons.I_TOOL_MIRROR),//first valid interaction points gets used
|
||||
ROUND_ROBIN_SOFT(AllIcons.I_TOOL_ROTATE),//attempt round robin, but skip invalid points
|
||||
ROUND_ROBIN_HARD(AllIcons.I_TOOL_ROTATE),//enforce round robin, wait for invalid points to be ready again
|
||||
|
||||
;
|
||||
|
||||
private final String translationKey;
|
||||
private final AllIcons icon;
|
||||
|
||||
SelectionMode(AllIcons icon) {
|
||||
this.icon = icon;
|
||||
this.translationKey = "mechanical_arm.selection_mode." + Lang.asId(name());
|
||||
}
|
||||
|
||||
@Override
|
||||
public AllIcons getIcon() {
|
||||
return icon;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTranslationKey() {
|
||||
return translationKey;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -343,6 +343,11 @@
|
|||
"create.tooltip.analogStrength": "Analog Strength: %1$s/15",
|
||||
"create.mechanical_mixer.min_ingredients": "Min. Ingredients",
|
||||
|
||||
"create.mechanical_arm.selection_mode": "Selection Mode",
|
||||
"create.mechanical_arm.selection_mode.default": "First Valid Target",
|
||||
"create.mechanical_arm.selection_mode.round_robin_soft": "Attempt Round Robin",
|
||||
"create.mechanical_arm.selection_mode.round_robin_hard": "Enforce Round Robin",
|
||||
|
||||
"create.gui.config.overlay1": "Hi :)",
|
||||
"create.gui.config.overlay2": "This is a sample overlay",
|
||||
"create.gui.config.overlay3": "Click or drag with your mouse",
|
||||
|
|
Loading…
Reference in a new issue