Placer/Hopper: Added redstone-ignored-logic, changed inversion-mode-icons accordingly.

This commit is contained in:
stfwi 2020-11-14 19:12:02 +01:00
parent d3301f3bef
commit fb3c37afb5
7 changed files with 48 additions and 24 deletions

View file

@ -1,6 +1,7 @@
{
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
"1.16.4": {
"1.1.4-b2": "[A] Steel Catwalks added (top and bottom aligned).\n[A] Steel Railings added.\n[F] Fixed Empty Fluid Barrel crafting crash (ty inflamedsebi).\n[A] Added Solar Panel power balancing.\n[M] GUI Button tooltip delay reduced to 800ms.\n[M] Hopper and Placer: Added \"Redstone ignored\" mode, changed icons from signal-like to Redstone-Torch-like.",
"1.1.4-b1": "[U] Ported to 1.16.4.",
"1.1.3": "[R] Release build v1.1.3.",
"1.1.3-b3": "[A] Metal Sliding Door added (double door wing style).\n[A] Doors implicitly open/close adjacent wings of double doors.\n[A] Disabled injected buttons from other mods in container GUIs.\n[A] Mob spawning on Rebar/Gas Concrete inhibited (IE Concrete Compliancy).\n[M] Small Tree Cutter chopping improved (loosened tree volume search restrictions).",
@ -18,6 +19,6 @@
},
"promos": {
"1.16.4-recommended": "1.1.3",
"1.16.4-latest": "1.1.4-b1"
"1.16.4-latest": "1.1.4-b2"
}
}

View file

@ -11,11 +11,12 @@ Mod sources for Minecraft version 1.16.x.
## Version history
~ v1.1.4-b2 [A] Steel Catwalks added (top and bottom aligned).
- v1.1.4-b2 [A] Steel Catwalks added (top and bottom aligned).
[A] Steel Railings added.
[F] Fixed Empty Fluid Barrel crafting crash (ty inflamedsebi).
[A] Added Solar Panel power balancing.
[M] GUI Button tooltip delay reduced to 800ms.
[M] Hopper and Placer: Added "Redstone ignored" mode, changed icons from signal-like to Redstone-Torch-like.
- v1.1.4-b1 [U] Ported to 1.16.4.

View file

@ -209,8 +209,10 @@ public class EdHopper
public static final int MAX_COLLECTION_RANGE = 4;
public static final int PERIOD_OFFSET = 10;
///
public static final int LOGIC_INVERTED = 0x01;
public static final int LOGIC_CONTINUOUS = 0x02;
public static final int LOGIC_NOT_INVERTED = 0x00;
public static final int LOGIC_INVERTED = 0x01;
public static final int LOGIC_CONTINUOUS = 0x02;
public static final int LOGIC_IGNORE_EXT = 0x04;
///
private boolean block_power_signal_ = false;
private boolean block_power_updated_ = false;
@ -644,9 +646,9 @@ public class EdHopper
tick_timer_ = TICK_INTERVAL;
// Cycle init
boolean dirty = block_power_updated_;
final boolean rssignal = ((logic_ & LOGIC_INVERTED)!=0)==(!block_power_signal_);
final boolean pulse_mode = ((logic_ & LOGIC_CONTINUOUS)==0);
boolean trigger = (rssignal && ((block_power_updated_) || (!pulse_mode)));
final boolean rssignal = ((logic_ & LOGIC_IGNORE_EXT)!=0) || ((logic_ & LOGIC_INVERTED)!=0)==(!block_power_signal_);
final boolean pulse_mode = ((logic_ & (LOGIC_CONTINUOUS|LOGIC_IGNORE_EXT))==0);
boolean trigger = ((logic_ & LOGIC_IGNORE_EXT)!=0) || (rssignal && ((block_power_updated_) || (!pulse_mode)));
final BlockState state = world.getBlockState(pos);
if(!(state.getBlock() instanceof HopperBlock)) { block_power_signal_= false; return; }
final Direction hopper_facing = state.get(HopperBlock.FACING);
@ -932,7 +934,15 @@ public class EdHopper
} else if(isPointInRegion(133, 49, 9, 9, mouseX, mouseY)) {
container.onGuiAction("manual_trigger", 1);
} else if(isPointInRegion(145, 49, 9, 9, mouseX, mouseY)) {
container.onGuiAction("logic", container.field(2) ^ HopperTileEntity.LOGIC_INVERTED);
final int mask = (HopperTileEntity.LOGIC_INVERTED|HopperTileEntity.LOGIC_IGNORE_EXT|HopperTileEntity.LOGIC_NOT_INVERTED);
int logic = (container.field(2) & mask);
switch(logic) {
case HopperTileEntity.LOGIC_NOT_INVERTED: logic = HopperTileEntity.LOGIC_INVERTED; break;
case HopperTileEntity.LOGIC_INVERTED: logic = HopperTileEntity.LOGIC_IGNORE_EXT; break;
case HopperTileEntity.LOGIC_IGNORE_EXT: logic = HopperTileEntity.LOGIC_NOT_INVERTED; break;
default: logic = HopperTileEntity.LOGIC_IGNORE_EXT;
}
container.onGuiAction("logic", (container.field(2) & (~mask)) | logic);
} else if(isPointInRegion(159, 49, 7, 9, mouseX, mouseY)) {
container.onGuiAction("logic", container.field(2) ^ HopperTileEntity.LOGIC_CONTINUOUS);
}
@ -986,8 +996,9 @@ public class EdHopper
}
// trigger logic
{
int inverter_offset = ((container.field(2) & HopperTileEntity.LOGIC_INVERTED) != 0) ? 11 : 0;
blit(mx, x0+145, y0+49, 177+inverter_offset, 49, 9, 9);
int inverter_offset_x = ((container.field(2) & HopperTileEntity.LOGIC_INVERTED) != 0) ? 11 : 0;
int inverter_offset_y = ((container.field(2) & HopperTileEntity.LOGIC_IGNORE_EXT) != 0) ? 10 : 0;
blit(mx, x0+145, y0+49, 177+inverter_offset_x, 49+inverter_offset_y, 9, 9);
int pulse_mode_offset = ((container.field(2) & HopperTileEntity.LOGIC_CONTINUOUS ) != 0) ? 9 : 0;
blit(mx, x0+159, y0+49, 199+pulse_mode_offset, 49, 9, 9);
}

View file

@ -187,12 +187,14 @@ public class EdPlacer
public static final int NUM_OF_SLOTS = 18;
public static final int NUM_OF_FIELDS = 3;
///
public static final int LOGIC_INVERTED = 0x01;
public static final int LOGIC_CONTINUOUS = 0x02;
public static final int LOGIC_NOT_INVERTED = 0x00;
public static final int LOGIC_INVERTED = 0x01;
public static final int LOGIC_CONTINUOUS = 0x02;
public static final int LOGIC_IGNORE_EXT = 0x04;
///
private boolean block_power_signal_ = false;
private boolean block_power_updated_ = false;
private int logic_ = LOGIC_INVERTED|LOGIC_CONTINUOUS;
private int logic_ = LOGIC_IGNORE_EXT|LOGIC_CONTINUOUS;
private int current_slot_index_ = 0;
private int tick_timer_ = 0;
protected NonNullList<ItemStack> stacks_;
@ -579,8 +581,8 @@ public class EdPlacer
final BlockState state = world.getBlockState(pos);
if(!(state.getBlock() instanceof PlacerBlock)) { block_power_signal_= false; return; }
final boolean updated = block_power_updated_;
final boolean rssignal = ((logic_ & LOGIC_INVERTED)!=0)==(!block_power_signal_);
final boolean trigger = (rssignal && ((updated) || ((logic_ & LOGIC_CONTINUOUS)!=0)));
final boolean rssignal = ((logic_ & LOGIC_IGNORE_EXT)!=0) || ((logic_ & LOGIC_INVERTED)!=0)==(!block_power_signal_);
final boolean trigger = ((logic_ & LOGIC_IGNORE_EXT)!=0) || (rssignal && ((updated) || ((logic_ & LOGIC_CONTINUOUS)!=0)));
final Direction placer_facing = state.get(PlacerBlock.FACING);
boolean dirty = updated;
// Trigger edge detection for next cycle
@ -762,9 +764,9 @@ public class EdPlacer
}
@Override
public void render/*render*/(MatrixStack mx, int mouseX, int mouseY, float partialTicks)
public void render(MatrixStack mx, int mouseX, int mouseY, float partialTicks)
{
renderBackground/*renderBackground*/(mx);
renderBackground(mx);
super.render(mx, mouseX, mouseY, partialTicks);
if(!tooltip_.render(mx, this, mouseX, mouseY)) renderHoveredTooltip(mx, mouseX, mouseY);
}
@ -774,7 +776,7 @@ public class EdPlacer
{}
@Override
public boolean mouseClicked/*mouseClicked*/(double mouseX, double mouseY, int mouseButton)
public boolean mouseClicked(double mouseX, double mouseY, int mouseButton)
{
tooltip_.resetTimer();
PlacerContainer container = (PlacerContainer)getContainer();
@ -784,7 +786,15 @@ public class EdPlacer
} else if(isPointInRegion(133, 49, 9, 9, mouseX, mouseY)) {
container.onGuiAction("manual_trigger", 1);
} else if(isPointInRegion(145, 49, 9, 9, mouseX, mouseY)) {
container.onGuiAction("logic", container.field(0) ^ PlacerTileEntity.LOGIC_INVERTED);
final int mask = (PlacerTileEntity.LOGIC_INVERTED|PlacerTileEntity.LOGIC_IGNORE_EXT|PlacerTileEntity.LOGIC_NOT_INVERTED);
int logic = (container.field(0) & mask);
switch(logic) {
case PlacerTileEntity.LOGIC_NOT_INVERTED: logic = PlacerTileEntity.LOGIC_INVERTED; break;
case PlacerTileEntity.LOGIC_INVERTED: logic = PlacerTileEntity.LOGIC_IGNORE_EXT; break;
case PlacerTileEntity.LOGIC_IGNORE_EXT: logic = PlacerTileEntity.LOGIC_NOT_INVERTED; break;
default: logic = PlacerTileEntity.LOGIC_IGNORE_EXT;
}
container.onGuiAction("logic", (container.field(0) & (~mask)) | logic);
} else if(isPointInRegion(159, 49, 7, 9, mouseX, mouseY)) {
container.onGuiAction("logic", container.field(0) ^ PlacerTileEntity.LOGIC_CONTINUOUS);
}
@ -806,7 +816,7 @@ public class EdPlacer
@Override
@SuppressWarnings("deprecation")
protected void drawGuiContainerBackgroundLayer/*drawGuiContainerBackgroundLayer*/(MatrixStack mx, float partialTicks, int mouseX, int mouseY)
protected void drawGuiContainerBackgroundLayer(MatrixStack mx, float partialTicks, int mouseX, int mouseY)
{
RenderSystem.enableBlend();
RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);
@ -830,8 +840,9 @@ public class EdPlacer
}
// trigger logic
{
int inverter_offset = ((container.field(0) & PlacerTileEntity.LOGIC_INVERTED) != 0) ? 11 : 0;
blit(mx, x0+145, y0+49, 177+inverter_offset, 49, 9, 9);
int inverter_offset_x = ((container.field(0) & PlacerTileEntity.LOGIC_INVERTED) != 0) ? 11 : 0;
int inverter_offset_y = ((container.field(0) & PlacerTileEntity.LOGIC_IGNORE_EXT) != 0) ? 10 : 0;
blit(mx, x0+145, y0+49, 177+inverter_offset_x, 49+inverter_offset_y, 9, 9);
int pulse_mode_offset = ((container.field(0) & PlacerTileEntity.LOGIC_CONTINUOUS ) != 0) ? 9 : 0;
blit(mx, x0+159, y0+49, 199+pulse_mode_offset, 49, 9, 9);
}

View file

@ -93,14 +93,14 @@
"block.engineersdecor.factory_hopper.help": "Hopper suitable for advanced factory\n automation. Can transfer half-stacks, max\n collection range 9x9. GUI Slider controls:\n - Collection range (0 to 4)\n - Insertion delay (0.5s to 10s)\n - Insertion stack size (1 to 32).\n GUI Redstone controls:\n Not inverted / inverted (default),\n pulse mode / continuous mode (default).",
"block.engineersdecor.factory_hopper.tooltips.count": "Insertion stack size §8(1 to 32 items)",
"block.engineersdecor.factory_hopper.tooltips.delayindicator": "Delay indicator\n§8Blinks when the insertion delay timer has not expired yet, or when the Hopper cannot insert into the adjacent inventory.",
"block.engineersdecor.factory_hopper.tooltips.inversion": "Inversion mode §8(inverted/not inverted)",
"block.engineersdecor.factory_hopper.tooltips.inversion": "Redstone mode §8(inverted/not inverted/ignored)",
"block.engineersdecor.factory_hopper.tooltips.period": "Insertion delay §8(1s to 10s)",
"block.engineersdecor.factory_hopper.tooltips.range": "Collection radius §8(0 to 4)",
"block.engineersdecor.factory_hopper.tooltips.rssignal": "External Redstone signal indicator",
"block.engineersdecor.factory_hopper.tooltips.triggermode": "Trigger mode §8(continuous/pulse)",
"block.engineersdecor.factory_placer": "Factory Block Placer",
"block.engineersdecor.factory_placer.help": "Allows placing blocks and planting\n crops or trees. GUI Redstone controls:\n Not inverted / inverted (default),\n pulse mode / continuous mode (default).\n Also supports spike planing from\n underneath the soil. Spits out items\n that it cannot place or plant.",
"block.engineersdecor.factory_placer.tooltips.inversion": "Inversion mode §8(inverted/not inverted)",
"block.engineersdecor.factory_placer.tooltips.inversion": "Redstone mode §8(inverted/not inverted/ignored)",
"block.engineersdecor.factory_placer.tooltips.rssignal": "External Redstone signal indicator",
"block.engineersdecor.factory_placer.tooltips.triggermode": "Trigger mode §8(continuous/pulse)",
"block.engineersdecor.fluid_barrel": "Fluid Barrel",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Before After
Before After