1.14/1.15: Delayed GUI button tooltips added.
This commit is contained in:
parent
7cf182652b
commit
f46b2b6bc7
59 changed files with 852 additions and 90 deletions
|
@ -5,4 +5,4 @@ version_minecraft=1.14.4
|
|||
version_forge_minecraft=1.14.4-28.2.3
|
||||
version_fml_mappings=20190719-1.14.3
|
||||
version_jei=1.14.4:6.0.0.10
|
||||
version_engineersdecor=1.1.0-b1
|
||||
version_engineersdecor=1.1.0-b2
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
|
||||
"1.14.4": {
|
||||
"1.1.0-b2": "[A] Added tooltips for buttons/settings in device GUIs (1.5s display delay).",
|
||||
"1.1.0-b1": "[F] Fixed Electrical Furnace speed sanitizing bug (issue #97, thx therobotmenace).\n[A] Sheet Metal Slab Slices added (only available if IE is installed).\n[M] Config options extended/updated.\n[M] Dense Grit Sand textures altered to get slightly more visible structure from distance.",
|
||||
"1.0.20-b7": "[A] Dense Grit Sand added.\n[!] Variant Slab compatibility fix. *This may alter placed slabs of this mod, data fixers don't work yet unfortunately*.",
|
||||
"1.0.20-b6": "[M] Slab Slice placement improved.\n[M] Quite some naming/refractoring under the hood.",
|
||||
|
@ -57,6 +58,6 @@
|
|||
},
|
||||
"promos": {
|
||||
"1.14.4-recommended": "",
|
||||
"1.14.4-latest": "1.1.0-b1"
|
||||
"1.14.4-latest": "1.1.0-b2"
|
||||
}
|
||||
}
|
|
@ -11,6 +11,8 @@ Mod sources for Minecraft version 1.14.4.
|
|||
|
||||
## Version history
|
||||
|
||||
- v1.1.0-b2 [A] Added tooltips for buttons/settings in device GUIs (1.5s display delay).
|
||||
|
||||
- v1.1.0-b1 [F] Fixed Electrical Furnace speed sanitizing bug (issue #97, thx therobotmenace).
|
||||
[A] Sheet Metal Slab Slices added (only available if IE is installed).
|
||||
[M] Config options extended/updated.
|
||||
|
|
|
@ -22,6 +22,8 @@ import wile.engineersdecor.libmc.detail.Auxiliaries;
|
|||
import wile.engineersdecor.libmc.detail.Inventories;
|
||||
import wile.engineersdecor.libmc.detail.Inventories.SlotRange;
|
||||
import wile.engineersdecor.libmc.detail.Networking;
|
||||
import wile.engineersdecor.libmc.detail.TooltipDisplay;
|
||||
import wile.engineersdecor.libmc.detail.TooltipDisplay.TipRange;
|
||||
import net.minecraft.inventory.container.*;
|
||||
import net.minecraft.network.play.server.SSetSlotPacket;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
|
@ -59,6 +61,7 @@ import net.minecraftforge.api.distmarker.Dist;
|
|||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
import com.mojang.blaze3d.platform.GlStateManager;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
@ -1106,6 +1109,7 @@ public class EdCraftingTable
|
|||
protected final PlayerEntity player;
|
||||
protected final ArrayList<Button> buttons = new ArrayList<Button>();
|
||||
protected final boolean history_slot_tooltip[] = {false,false,false,false,false,false,false,false,false,false};
|
||||
protected final TooltipDisplay tooltip = new TooltipDisplay();
|
||||
|
||||
public CraftingTableGui(CraftingTableContainer container, PlayerInventory playerInventory, ITextComponent title)
|
||||
{
|
||||
|
@ -1131,6 +1135,16 @@ public class EdCraftingTable
|
|||
buttons.add(addButton(new ImageButton(x0+59, y0+71, 17, 9, 180,71, 9, BACKGROUND, (bt)->action(CraftingTableContainer.BUTTON_TO_PLAYER))));
|
||||
}
|
||||
}
|
||||
{
|
||||
List<TipRange> tooltips = new ArrayList<>();
|
||||
final String prefix = ModContent.TREATED_WOOD_CRAFTING_TABLE.getTranslationKey() + ".tooltips.";
|
||||
String[] translation_keys = { "next", "prev", "clear", "nextcollisionrecipe", "fromstorage", "tostorage", "fromplayer", "toplayer" };
|
||||
for(int i=0; (i<buttons.size()) && (i<translation_keys.length); ++i) {
|
||||
Button bt = buttons.get(i);
|
||||
tooltips.add(new TipRange(bt.x,bt.y, bt.getWidth(), bt.getHeight(), Auxiliaries.localizable(prefix+translation_keys[i])));
|
||||
}
|
||||
tooltip.init(tooltips);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1143,7 +1157,7 @@ public class EdCraftingTable
|
|||
}
|
||||
renderBackground();
|
||||
super.render(mouseX, mouseY, partialTicks);
|
||||
renderHoveredToolTip(mouseX, mouseY);
|
||||
if(!tooltip.render(this,mouseX,mouseY)) renderHoveredToolTip(mouseX, mouseY);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1229,11 +1243,12 @@ public class EdCraftingTable
|
|||
{ action(message, new CompoundNBT()); }
|
||||
|
||||
protected void action(String message, CompoundNBT nbt)
|
||||
{ getContainer().onGuiAction(message, nbt); }
|
||||
{ getContainer().onGuiAction(message, nbt); tooltip.resetTimer(); }
|
||||
|
||||
@Override
|
||||
protected void handleMouseClick(Slot slot, int slotId, int mouseButton, ClickType type)
|
||||
{
|
||||
tooltip.resetTimer();
|
||||
if(type == ClickType.PICKUP) {
|
||||
boolean place_refab = (slot instanceof CraftingResultSlot) && (!slot.getHasStack());
|
||||
if(place_refab && with_assist_direct_history_refab) on_history_item_placement(); // place before crafting -> direct item pick
|
||||
|
@ -1281,6 +1296,7 @@ public class EdCraftingTable
|
|||
@Override
|
||||
public boolean mouseScrolled(double mouseX, double mouseY, double wheel_inc)
|
||||
{
|
||||
tooltip.resetTimer();
|
||||
final Slot resultSlot = this.getSlotUnderMouse();
|
||||
if((!with_crafting_slot_mouse_scrolling) || (!(resultSlot instanceof CraftingResultSlot))) {
|
||||
return this.func_212930_a(mouseX, mouseY).filter((evl) -> {
|
||||
|
|
|
@ -13,6 +13,8 @@ import wile.engineersdecor.ModEngineersDecor;
|
|||
import wile.engineersdecor.libmc.blocks.StandardBlocks;
|
||||
import wile.engineersdecor.libmc.detail.Inventories;
|
||||
import wile.engineersdecor.libmc.detail.Networking;
|
||||
import wile.engineersdecor.libmc.detail.TooltipDisplay;
|
||||
import wile.engineersdecor.libmc.detail.TooltipDisplay.TipRange;
|
||||
import net.minecraft.tileentity.ITickableTileEntity;
|
||||
import net.minecraft.inventory.container.INamedContainerProvider;
|
||||
import net.minecraft.block.DoorBlock;
|
||||
|
@ -23,10 +25,11 @@ import net.minecraft.state.BooleanProperty;
|
|||
import net.minecraft.state.StateContainer;
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
import net.minecraft.util.math.*;
|
||||
import net.minecraft.util.text.StringTextComponent;
|
||||
import net.minecraft.util.math.shapes.ISelectionContext;
|
||||
import net.minecraft.util.math.shapes.VoxelShape;
|
||||
import net.minecraft.util.math.shapes.VoxelShapes;
|
||||
import net.minecraft.util.text.StringTextComponent;
|
||||
import net.minecraft.util.text.TranslationTextComponent;
|
||||
import net.minecraft.world.IBlockReader;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
|
@ -52,6 +55,7 @@ import net.minecraftforge.items.wrapper.SidedInvWrapper;
|
|||
import net.minecraftforge.items.CapabilityItemHandler;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import com.mojang.blaze3d.platform.GlStateManager;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
@ -802,25 +806,43 @@ public class EdDropper
|
|||
public static class DropperGui extends ContainerScreen<DropperContainer>
|
||||
{
|
||||
protected final PlayerEntity player_;
|
||||
protected final TooltipDisplay tooltip_ = new TooltipDisplay();
|
||||
|
||||
public DropperGui(DropperContainer container, PlayerInventory player_inventory, ITextComponent title)
|
||||
{ super(container, player_inventory, title); this.player_ = player_inventory.player; }
|
||||
|
||||
@Override
|
||||
public void init()
|
||||
{ super.init(); }
|
||||
{
|
||||
super.init();
|
||||
{
|
||||
final String prefix = ModContent.FACTORY_DROPPER.getTranslationKey() + ".tooltips.";
|
||||
final int x0 = getGuiLeft(), y0 = getGuiTop();
|
||||
tooltip_.init(
|
||||
new TipRange(x0+130, y0+10, 12, 25, new TranslationTextComponent(prefix + "velocity")),
|
||||
new TipRange(x0+145, y0+10, 25, 25, new TranslationTextComponent(prefix + "direction")),
|
||||
new TipRange(x0+129, y0+40, 44, 10, new TranslationTextComponent(prefix + "dropcount")),
|
||||
new TipRange(x0+129, y0+50, 44, 10, new TranslationTextComponent(prefix + "period")),
|
||||
new TipRange(x0+114, y0+51, 9, 9, new TranslationTextComponent(prefix + "rssignal")),
|
||||
new TipRange(x0+162, y0+66, 7, 9, new TranslationTextComponent(prefix + "triggermode")),
|
||||
new TipRange(x0+132, y0+66, 9, 9, new TranslationTextComponent(prefix + "filtergate")),
|
||||
new TipRange(x0+148, y0+66, 9, 9, new TranslationTextComponent(prefix + "externgate"))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(int mouseX, int mouseY, float partialTicks)
|
||||
{
|
||||
renderBackground();
|
||||
super.render(mouseX, mouseY, partialTicks);
|
||||
renderHoveredToolTip(mouseX, mouseY);
|
||||
if(!tooltip_.render(this, mouseX, mouseY)) renderHoveredToolTip(mouseX, mouseY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(double mouseX, double mouseY, int mouseButton)
|
||||
{
|
||||
tooltip_.resetTimer();
|
||||
DropperContainer container = (DropperContainer)getContainer();
|
||||
int mx = (int)(mouseX - getGuiLeft() + .5), my = (int)(mouseY - getGuiTop() + .5);
|
||||
if((!isPointInRegion(114, 1, 61, 79, mouseX, mouseY))) {
|
||||
|
|
|
@ -12,6 +12,8 @@ import wile.engineersdecor.ModContent;
|
|||
import wile.engineersdecor.ModEngineersDecor;
|
||||
import wile.engineersdecor.libmc.detail.Inventories;
|
||||
import wile.engineersdecor.libmc.detail.Networking;
|
||||
import wile.engineersdecor.libmc.detail.TooltipDisplay;
|
||||
import wile.engineersdecor.libmc.detail.TooltipDisplay.TipRange;
|
||||
import net.minecraft.world.IBlockReader;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.block.BlockState;
|
||||
|
@ -32,6 +34,7 @@ import net.minecraft.entity.LivingEntity;
|
|||
import net.minecraft.util.*;
|
||||
import net.minecraft.util.text.StringTextComponent;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TranslationTextComponent;
|
||||
import net.minecraft.util.math.BlockRayTraceResult;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
|
@ -782,20 +785,32 @@ public class EdElectricalFurnace
|
|||
public static class ElectricalFurnaceGui extends ContainerScreen<ElectricalFurnaceContainer>
|
||||
{
|
||||
protected final PlayerEntity player_;
|
||||
protected final TooltipDisplay tooltip_ = new TooltipDisplay();
|
||||
|
||||
public ElectricalFurnaceGui(ElectricalFurnaceContainer container, PlayerInventory player_inventory, ITextComponent title)
|
||||
{ super(container, player_inventory, title); this.player_ = player_inventory.player; }
|
||||
|
||||
@Override
|
||||
public void init()
|
||||
{ super.init(); }
|
||||
{
|
||||
super.init();
|
||||
{
|
||||
final String prefix = ModContent.SMALL_ELECTRICAL_FURNACE.getTranslationKey() + ".tooltips.";
|
||||
final int x0 = getGuiLeft(), y0 = getGuiTop();
|
||||
final Slot aux = container.getSlot(ElectricalFurnaceTileEntity.SMELTING_AUX_SLOT_NO);
|
||||
tooltip_.init(
|
||||
new TipRange(x0+135, y0+50, 25, 25, new TranslationTextComponent(prefix + "speed")),
|
||||
new TipRange(x0+aux.xPos, y0+aux.yPos, 16, 16, new TranslationTextComponent(prefix + "auxslot"))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(int mouseX, int mouseY, float partialTicks)
|
||||
{
|
||||
renderBackground();
|
||||
super.render(mouseX, mouseY, partialTicks);
|
||||
renderHoveredToolTip(mouseX, mouseY);
|
||||
if(!tooltip_.render(this, mouseX, mouseY)) renderHoveredToolTip(mouseX, mouseY);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -825,6 +840,7 @@ public class EdElectricalFurnace
|
|||
@Override
|
||||
public boolean mouseClicked(double mouseX, double mouseY, int mouseButton)
|
||||
{
|
||||
tooltip_.resetTimer();
|
||||
ElectricalFurnaceContainer container = (ElectricalFurnaceContainer)getContainer();
|
||||
int mx = (int)(mouseX - getGuiLeft() + .5), my = (int)(mouseY - getGuiTop() + .5);
|
||||
if((!isPointInRegion(136, 48, 28, 28, mouseX, mouseY))) {
|
||||
|
|
|
@ -15,6 +15,8 @@ import wile.engineersdecor.libmc.detail.Auxiliaries;
|
|||
import wile.engineersdecor.libmc.detail.Inventories;
|
||||
import wile.engineersdecor.libmc.detail.Inventories.SlotRange;
|
||||
import wile.engineersdecor.libmc.detail.Networking;
|
||||
import wile.engineersdecor.libmc.detail.TooltipDisplay;
|
||||
import wile.engineersdecor.libmc.detail.TooltipDisplay.TipRange;
|
||||
import net.minecraft.world.IBlockReader;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.block.Block;
|
||||
|
@ -838,25 +840,42 @@ public class EdHopper
|
|||
public static class HopperGui extends ContainerScreen<HopperContainer>
|
||||
{
|
||||
protected final PlayerEntity player_;
|
||||
protected final TooltipDisplay tooltip_ = new TooltipDisplay();
|
||||
|
||||
public HopperGui(HopperContainer container, PlayerInventory player_inventory, ITextComponent title)
|
||||
{ super(container, player_inventory, title); this.player_ = player_inventory.player; }
|
||||
|
||||
@Override
|
||||
public void init()
|
||||
{ super.init(); }
|
||||
{
|
||||
super.init();
|
||||
{
|
||||
final String prefix = ModContent.FACTORY_HOPPER.getTranslationKey() + ".tooltips.";
|
||||
final int x0 = getGuiLeft(), y0 = getGuiTop();
|
||||
tooltip_.init(
|
||||
new TipRange(x0+148, y0+22, 3, 3, new TranslationTextComponent(prefix + "delayindicator")),
|
||||
new TipRange(x0+130, y0+ 9, 40, 10, new TranslationTextComponent(prefix + "range")),
|
||||
new TipRange(x0+130, y0+22, 40, 10, new TranslationTextComponent(prefix + "period")),
|
||||
new TipRange(x0+130, y0+35, 40, 10, new TranslationTextComponent(prefix + "count")),
|
||||
new TipRange(x0+133, y0+49, 9, 9, new TranslationTextComponent(prefix + "rssignal")),
|
||||
new TipRange(x0+145, y0+49, 9, 9, new TranslationTextComponent(prefix + "inversion")),
|
||||
new TipRange(x0+159, y0+49, 9, 9, new TranslationTextComponent(prefix + "triggermode"))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(int mouseX, int mouseY, float partialTicks)
|
||||
{
|
||||
renderBackground();
|
||||
super.render(mouseX, mouseY, partialTicks);
|
||||
renderHoveredToolTip(mouseX, mouseY);
|
||||
if(!tooltip_.render(this, mouseX, mouseY)) renderHoveredToolTip(mouseX, mouseY);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleMouseClick(Slot slot, int slotId, int button, ClickType type)
|
||||
{
|
||||
tooltip_.resetTimer();
|
||||
if((type == ClickType.QUICK_MOVE) && (slot!=null) && slot.getHasStack() && Auxiliaries.isShiftDown() && Auxiliaries.isCtrlDown()) {
|
||||
CompoundNBT nbt = new CompoundNBT();
|
||||
nbt.putInt("slot", slotId);
|
||||
|
@ -869,6 +888,7 @@ public class EdHopper
|
|||
@Override
|
||||
public boolean mouseClicked(double mouseX, double mouseY, int mouseButton)
|
||||
{
|
||||
tooltip_.resetTimer();
|
||||
HopperContainer container = (HopperContainer)getContainer();
|
||||
int mx = (int)(mouseX - getGuiLeft() + .5), my = (int)(mouseY - getGuiTop() + .5);
|
||||
if((!isPointInRegion(126, 1, 49, 60, mouseX, mouseY))) {
|
||||
|
|
|
@ -12,6 +12,8 @@ import wile.engineersdecor.ModContent;
|
|||
import wile.engineersdecor.ModEngineersDecor;
|
||||
import wile.engineersdecor.libmc.blocks.StandardBlocks;
|
||||
import wile.engineersdecor.libmc.detail.Networking;
|
||||
import wile.engineersdecor.libmc.detail.TooltipDisplay;
|
||||
import wile.engineersdecor.libmc.detail.TooltipDisplay.TipRange;
|
||||
import net.minecraft.block.*;
|
||||
import net.minecraft.world.IBlockReader;
|
||||
import net.minecraft.world.World;
|
||||
|
@ -32,9 +34,10 @@ import net.minecraft.inventory.container.Container;
|
|||
import net.minecraft.inventory.container.Slot;
|
||||
import net.minecraft.client.gui.screen.inventory.ContainerScreen;
|
||||
import net.minecraft.util.*;
|
||||
import net.minecraft.util.math.*;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.StringTextComponent;
|
||||
import net.minecraft.util.text.TranslationTextComponent;
|
||||
import net.minecraft.util.math.*;
|
||||
import net.minecraft.util.math.shapes.ISelectionContext;
|
||||
import net.minecraft.util.math.shapes.VoxelShape;
|
||||
import net.minecraft.util.math.shapes.VoxelShapes;
|
||||
|
@ -689,25 +692,38 @@ public class EdPlacer
|
|||
public static class PlacerGui extends ContainerScreen<PlacerContainer>
|
||||
{
|
||||
protected final PlayerEntity player_;
|
||||
protected final TooltipDisplay tooltip_ = new TooltipDisplay();
|
||||
|
||||
public PlacerGui(PlacerContainer container, PlayerInventory player_inventory, ITextComponent title)
|
||||
{ super(container, player_inventory, title); this.player_ = player_inventory.player; }
|
||||
|
||||
@Override
|
||||
public void init()
|
||||
{ super.init(); }
|
||||
{
|
||||
super.init();
|
||||
{
|
||||
final String prefix = ModContent.FACTORY_PLACER.getTranslationKey() + ".tooltips.";
|
||||
final int x0 = getGuiLeft(), y0 = getGuiTop();
|
||||
tooltip_.init(
|
||||
new TipRange(x0+133, y0+49, 9, 9, new TranslationTextComponent(prefix + "rssignal")),
|
||||
new TipRange(x0+145, y0+49, 9, 9, new TranslationTextComponent(prefix + "inversion")),
|
||||
new TipRange(x0+159, y0+49, 9, 9, new TranslationTextComponent(prefix + "triggermode"))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(int mouseX, int mouseY, float partialTicks)
|
||||
{
|
||||
renderBackground();
|
||||
super.render(mouseX, mouseY, partialTicks);
|
||||
renderHoveredToolTip(mouseX, mouseY);
|
||||
if(!tooltip_.render(this, mouseX, mouseY)) renderHoveredToolTip(mouseX, mouseY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(double mouseX, double mouseY, int mouseButton)
|
||||
{
|
||||
tooltip_.resetTimer();
|
||||
PlacerContainer container = (PlacerContainer)getContainer();
|
||||
int mx = (int)(mouseX - getGuiLeft() + .5), my = (int)(mouseY - getGuiTop() + .5);
|
||||
if((!isPointInRegion(126, 1, 49, 60, mouseX, mouseY))) {
|
||||
|
|
|
@ -0,0 +1,103 @@
|
|||
/*
|
||||
* @file Tooltip.java
|
||||
* @author Stefan Wilhelm (wile)
|
||||
* @copyright (C) 2018 Stefan Wilhelm
|
||||
* @license MIT (see https://opensource.org/licenses/MIT)
|
||||
*
|
||||
* Delayed tooltip for a selected area. Constructed with a
|
||||
* GUI, invoked in `render()`.
|
||||
*/
|
||||
package wile.engineersdecor.libmc.detail;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.screen.inventory.ContainerScreen;
|
||||
import net.minecraft.inventory.container.Container;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
public class TooltipDisplay
|
||||
{
|
||||
private static long default_delay = 1500;
|
||||
private static int default_max_deviation = 1;
|
||||
|
||||
public static void config(long delay, int max_deviation)
|
||||
{
|
||||
default_delay = (long)MathHelper.clamp((long)delay, 500L, 5000L);
|
||||
default_max_deviation = MathHelper.clamp(max_deviation, 1, 5);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------------------------
|
||||
|
||||
public static class TipRange
|
||||
{
|
||||
public final int x0,y0,x1,y1;
|
||||
public final ITextComponent text;
|
||||
public TipRange(int x, int y, int w, int h, ITextComponent text)
|
||||
{ this.text=text; this.x0=x; this.y0=y; this.x1=x0+w-1; this.y1=y0+h-1; }
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------------------------
|
||||
|
||||
private List<TipRange> ranges = new ArrayList<>();
|
||||
private long delay = default_delay;
|
||||
private int max_deviation = default_max_deviation;
|
||||
private int x_last, y_last;
|
||||
private long t;
|
||||
|
||||
public TooltipDisplay()
|
||||
{ t = System.currentTimeMillis(); }
|
||||
|
||||
public void init(List<TipRange> ranges, long delay_ms, int max_deviation_xy)
|
||||
{
|
||||
this.ranges = ranges;
|
||||
this.delay = delay_ms;
|
||||
this.max_deviation = max_deviation_xy;
|
||||
t = System.currentTimeMillis();
|
||||
x_last = y_last = 0;
|
||||
}
|
||||
|
||||
public void init(List<TipRange> ranges)
|
||||
{ init(ranges, default_delay, default_max_deviation); }
|
||||
|
||||
public void init(TipRange... ranges)
|
||||
{ init(Arrays.asList(ranges), default_delay, default_max_deviation); }
|
||||
|
||||
public void resetTimer()
|
||||
{ t = System.currentTimeMillis(); }
|
||||
|
||||
public <T extends Container> boolean render(final ContainerScreen<T> gui, int x, int y)
|
||||
{
|
||||
if((Math.abs(x-x_last) > max_deviation) || (Math.abs(y-y_last) > max_deviation)) {
|
||||
x_last = x;
|
||||
y_last = y;
|
||||
resetTimer();
|
||||
return false;
|
||||
} else if(Math.abs(System.currentTimeMillis()-t) < delay) {
|
||||
return false;
|
||||
} else if(ranges.stream().noneMatch(
|
||||
(tip)->{
|
||||
if((x<tip.x0) || (x>tip.x1) || (y<tip.y0) || (y>tip.y1)) return false;
|
||||
String text = tip.text.getFormattedText();
|
||||
if(!text.isEmpty() && (!text.startsWith("block."))) {
|
||||
gui.renderTooltip(Collections.singletonList(tip.text.getFormattedText()), x, y, Minecraft.getInstance().fontRenderer);
|
||||
}
|
||||
return true;
|
||||
})
|
||||
){
|
||||
resetTimer();
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -71,10 +71,28 @@
|
|||
"block.engineersdecor.dense_grit_sand_block.help": "§6A compressed sandy soil mixed with stone grid, as known from machine and storage yards.§r Flowers don't really grow on that. Position dependent texture variations.",
|
||||
"block.engineersdecor.factory_dropper": "Factory Dropper",
|
||||
"block.engineersdecor.factory_dropper.help": "§6Dropper suitable for advanced factory automation.§r Has twelve round-robin selected slots. Drop force, angle, stack size, and cool-down delay adjustable using sliders in the GUI. Three stack compare slots (below the inventory slots) with logical AND or OR can be used as internal trigger source. The internal trigger can be AND'ed or OR'ed with the external redstone signal trigger. Trigger simulation buttons for testing. Pre-opens shutter door when internal trigger conditions are met. Drops all matching stacks simultaneously. Simply click on all elements in the GUI to see how it works.",
|
||||
"block.engineersdecor.factory_dropper.tooltips.direction": "Drop direction x/y (-45° to +45°)",
|
||||
"block.engineersdecor.factory_dropper.tooltips.dropcount": "Drop stack size (1 to 32 items)",
|
||||
"block.engineersdecor.factory_dropper.tooltips.externgate": "External signal combination logic (AND or OR)§r\n§8AND: Drop only on an external signal.\nOR: Drop filter matches automatically, non-matching items on external trigger.",
|
||||
"block.engineersdecor.factory_dropper.tooltips.filtergate": "Filter combination gate logic (AND or OR)§r\n§8AND: Drop the stacks as specified in the filters when ALL filters are green.\nOR: Drop the stack of each individual filter when green.",
|
||||
"block.engineersdecor.factory_dropper.tooltips.period": "Drop delay (1s to 10s)",
|
||||
"block.engineersdecor.factory_dropper.tooltips.rssignal": "External Redstone signal indicator\n §8(click to generate a test trigger).",
|
||||
"block.engineersdecor.factory_dropper.tooltips.triggermode": "Trigger mode (pulse/continuous)§r\n§8Pulse: One drop for each OFF->ON of the external signal.\nContinuous: Drop as long as the external signal is ON.",
|
||||
"block.engineersdecor.factory_dropper.tooltips.velocity": "Drop velocity (slow to fast speed)",
|
||||
"block.engineersdecor.factory_hopper": "Factory Hopper",
|
||||
"block.engineersdecor.factory_hopper.help": "§6Hopper suitable for advanced factory automation.§r Can transfer half-stacks, max collection range 9x9.\n GUI Slider controls: Collection range (0 to 4), insertion delay (0.5s to 10s), insertion stack size (1 to 32).\n GUI Redstone controls: Not inverted / inverted (default), 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.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": "§6Allows placing blocks and planting crops or trees.§r\n GUI Redstone controls: Not inverted / inverted (default), pulse mode / continuous mode (default).\n Also supports spike planing from underneath the soil. Spits out items that it cannot place or plant.",
|
||||
"block.engineersdecor.factory_placer.tooltips.inversion": "Inversion mode §8(inverted/not inverted)",
|
||||
"block.engineersdecor.factory_placer.tooltips.rssignal": "External Redstone signal indicator",
|
||||
"block.engineersdecor.factory_placer.tooltips.triggermode": "Trigger mode §8(continuous/pulse)",
|
||||
"block.engineersdecor.gas_concrete": "Gas Concrete Block",
|
||||
"block.engineersdecor.gas_concrete.help": "§6Low hardness, high production yield concrete.§r Easy to break decorative concrete block.",
|
||||
"block.engineersdecor.gas_concrete_slab": "Gas Concrete Slab",
|
||||
|
@ -159,6 +177,8 @@
|
|||
"block.engineersdecor.small_block_breaker.status": "SOC: %1$s%% of %2$sRF§r | progress: %3$s%%",
|
||||
"block.engineersdecor.small_electrical_furnace": "Small Electrical Furnace",
|
||||
"block.engineersdecor.small_electrical_furnace.help": "§6Small metal cased pass-through furnace.§r Automatically draws items from the input side and puts items into the inventory at the output side. Items can be inserted or drawn from all sides using hoppers. Implicitly bypasses items that cannot be smelted or cooked to the output. Slightly more energy efficient and faster than a heated cobblestone furnace. Fifos and feeders transfer whole stacks. Feeders require a bit of power.",
|
||||
"block.engineersdecor.small_electrical_furnace.tooltips.auxslot": "Auxiliary slot\n§8Place a Hopper here to enable automatic feeding from the input side.",
|
||||
"block.engineersdecor.small_electrical_furnace.tooltips.speed": "Smelting speed selection §8(OFF/I/II/III)",
|
||||
"block.engineersdecor.small_fluid_funnel": "Small Fluid Collection Funnel",
|
||||
"block.engineersdecor.small_fluid_funnel.help": "§6Collects fluids above it.§r Has an internal tank with three buckets capacity. Traces flowing fluids to nearby source blocks. The fluid can be obtained with fluid transfer systems or a bucket. Fills only tanks below (gravity transfer). Compatible with vanilla infinite-water-source creation.",
|
||||
"block.engineersdecor.small_lab_furnace": "Small Laboratory Furnace",
|
||||
|
@ -207,6 +227,14 @@
|
|||
"block.engineersdecor.treated_wood_broad_windowsill.help": "§6Simple window decoration.",
|
||||
"block.engineersdecor.treated_wood_crafting_table": "Treated Wood Crafting Table",
|
||||
"block.engineersdecor.treated_wood_crafting_table.help": "§6Robust and weather-proof.§r Eight storage slots, keeps inventory, no vanilla recipe book.\n Click up/down arrow buttons for crafting history selection, output slot for item placement, X-button to clear crafting grid and history. Shift-click stack: player-to-storage stack transfer when crafting grid empty, otherwise player-to-grid stack transfer. Automatically distributes the clicked stack. Shift-Ctrl-click stack: Move all same stacks. Mouse wheel over crafting slot: Increase/decrease crafting grid items.",
|
||||
"block.engineersdecor.treated_wood_crafting_table.tooltips.clear": "Clear grid to player inventory",
|
||||
"block.engineersdecor.treated_wood_crafting_table.tooltips.fromplayer": "Move items from player inventory",
|
||||
"block.engineersdecor.treated_wood_crafting_table.tooltips.fromstorage": "Move items from storage",
|
||||
"block.engineersdecor.treated_wood_crafting_table.tooltips.next": "Next crafting history recipe",
|
||||
"block.engineersdecor.treated_wood_crafting_table.tooltips.nextcollisionrecipe": "Show next colliding recipe",
|
||||
"block.engineersdecor.treated_wood_crafting_table.tooltips.prev": "Previous crafting history recipe",
|
||||
"block.engineersdecor.treated_wood_crafting_table.tooltips.toplayer": "Clear grid to player inventory",
|
||||
"block.engineersdecor.treated_wood_crafting_table.tooltips.tostorage": "Clear grid to storage",
|
||||
"block.engineersdecor.treated_wood_floor": "Treated Wood Floor",
|
||||
"block.engineersdecor.treated_wood_floor.help": "§6Decorative floor tiles with texture variations.§r",
|
||||
"block.engineersdecor.treated_wood_ladder": "Treated Wood Ladder",
|
||||
|
|
|
@ -71,10 +71,28 @@
|
|||
"block.engineersdecor.dense_grit_sand_block.help": "§6A compressed sandy soil mixed with stone grid, as known from machine and storage yards.§r Flowers don't really grow on that. Position dependent texture variations.",
|
||||
"block.engineersdecor.factory_dropper": "Фабричный выбрасыватель",
|
||||
"block.engineersdecor.factory_dropper.help": "§6Выбрасыватель подходит для продвинутой автоматизации производства.§r Имеет 12 выборочных слотов. Сила броска, угол, размер стопки и задержка настраиваются в GUI. 3 слота сравнения стека с логическим И или ИЛИ могут использоваться в качестве внутреннего источника запуска. Внутренний триггер может быть И или ИЛИ с внешним триггерным сигналом красного камня. Триггерные кнопки симуляции для тестирования. Предварительно открывает дверцу затвора, когда выполняются условия внутреннего запуска. Сбрасывает все соответствующие стеки одновременно. Нажмите на все элементы в GUI, чтобы увидеть, как это работает.",
|
||||
"block.engineersdecor.factory_dropper.tooltips.direction": "Drop direction x/y (-45° to +45°)",
|
||||
"block.engineersdecor.factory_dropper.tooltips.dropcount": "Drop stack size (1 to 32 items)",
|
||||
"block.engineersdecor.factory_dropper.tooltips.externgate": "External signal combination logic (AND or OR)§r\n§8AND: Drop only on an external signal.\nOR: Drop filter matches automatically, non-matching items on external trigger.",
|
||||
"block.engineersdecor.factory_dropper.tooltips.filtergate": "Filter combination gate logic (AND or OR)§r\n§8AND: Drop the stacks as specified in the filters when ALL filters are green.\nOR: Drop the stack of each individual filter when green.",
|
||||
"block.engineersdecor.factory_dropper.tooltips.period": "Drop delay (1s to 10s)",
|
||||
"block.engineersdecor.factory_dropper.tooltips.rssignal": "External Redstone signal indicator\n §8(click to generate a test trigger).",
|
||||
"block.engineersdecor.factory_dropper.tooltips.triggermode": "Trigger mode (pulse/continuous)§r\n§8Pulse: One drop for each OFF->ON of the external signal.\nContinuous: Drop as long as the external signal is ON.",
|
||||
"block.engineersdecor.factory_dropper.tooltips.velocity": "Drop velocity (slow to fast speed)",
|
||||
"block.engineersdecor.factory_hopper": "Фабричная воронка",
|
||||
"block.engineersdecor.factory_hopper.help": "§6Воронка для продвинутой автоматизации производства.§r Может передавать полустеки, максимальный диапазон сбора 9x9.\n GUI ползунки: Диапазон сбора (0 до 4), задержка помещения(0.5сек до 10сек), размер стека помещения (1 до 32).\n GUI редстоун: Не инвертирован / инвертирован (по умолчанию), пульс режим / постоянный режим (по умолчанию).",
|
||||
"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.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": "Фабричный разместитель блоков",
|
||||
"block.engineersdecor.factory_placer.help": "§6Позволяет размещать блоки и сажать урожай или деревья.§r\n GUI редстоун: Не инвертирован / инвертирован (по умолчанию), пульс режим / постоянный режим (по умолчанию).\n Also supports spike planing from underneath the soil. Выплевывает предметы, которые он не может поместить или посадить.",
|
||||
"block.engineersdecor.factory_placer.tooltips.inversion": "Inversion mode §8(inverted/not inverted)",
|
||||
"block.engineersdecor.factory_placer.tooltips.rssignal": "External Redstone signal indicator",
|
||||
"block.engineersdecor.factory_placer.tooltips.triggermode": "Trigger mode §8(continuous/pulse)",
|
||||
"block.engineersdecor.gas_concrete": "Газобетон",
|
||||
"block.engineersdecor.gas_concrete.help": "§6Низкая твердость, высокая производительность бетона.§r Легко ломающийся декоративный бетонный блок.",
|
||||
"block.engineersdecor.gas_concrete_slab": "Газобетонная плита",
|
||||
|
@ -159,6 +177,8 @@
|
|||
"block.engineersdecor.small_block_breaker.status": "SOC: %1$s%% of %2$sRF§r | progress: %3$s%%",
|
||||
"block.engineersdecor.small_electrical_furnace": "Компактная конвейерная электрическая печь",
|
||||
"block.engineersdecor.small_electrical_furnace.help": "§6Компактная конвейерная печь в металлическом корпусе.§r Автоматически принимает предметы со стороны ввода и складывает в инвентарь со стороны вывода. Предметы можно помещать/забирать со всех сторон с помощью воронок. Без проблем пропускает элементы, которые нельзя выплавить или приготовить. Чуть более энергоэффективная и быстрая, чем утеплённая булыжная печь. Транспортировка работает стеками. Механизм требует мало энергии.",
|
||||
"block.engineersdecor.small_electrical_furnace.tooltips.auxslot": "Auxiliary slot\n§8Place a Hopper here to enable automatic feeding from the input side.",
|
||||
"block.engineersdecor.small_electrical_furnace.tooltips.speed": "Smelting speed selection §8(OFF/I/II/III)",
|
||||
"block.engineersdecor.small_fluid_funnel": "Малая воронка для сбора жидкости",
|
||||
"block.engineersdecor.small_fluid_funnel.help": "§6Собирает жидкости над ним.§r Имеет внутренний бак на три ведра. Прослеживает текучие жидкости к соседним блокам источника. Жидкость может быть получена с помощью систем передачи жидкости или ведра. Заполняет только резервуары ниже (сила гравитации). Совместим с ванильным источником бесконечной воды.",
|
||||
"block.engineersdecor.small_lab_furnace": "Компактная лабораторная печь",
|
||||
|
@ -207,6 +227,14 @@
|
|||
"block.engineersdecor.treated_wood_broad_windowsill.help": "§6Простое оформление окон.",
|
||||
"block.engineersdecor.treated_wood_crafting_table": "Верстак из обработанного дерева",
|
||||
"block.engineersdecor.treated_wood_crafting_table.help": "§6Прочный и устойчивый к погодным условиям. Восемь слотов для хранения. Хранит инвентарь. Нажимайте кнопки со стрелками вверх/вниз для выбора из истории, выходной слот для размещения предметов, X-кнопка очистить сетку крафта и историю. Shift-клик по стеку: передача стека от игрока в хранилище при создании если сетка пуста, в противном случае перенос от игрока в сетку. Автоматически распределяет кликаемый стек. Shift-Ctrl-клик по стаку: перемещает одинаковые стаки. Колёсико мыши: добавляет/отнимает предметы в сетке.",
|
||||
"block.engineersdecor.treated_wood_crafting_table.tooltips.clear": "Clear grid to player inventory",
|
||||
"block.engineersdecor.treated_wood_crafting_table.tooltips.fromplayer": "Move items from player inventory",
|
||||
"block.engineersdecor.treated_wood_crafting_table.tooltips.fromstorage": "Move items from storage",
|
||||
"block.engineersdecor.treated_wood_crafting_table.tooltips.next": "Next crafting history recipe",
|
||||
"block.engineersdecor.treated_wood_crafting_table.tooltips.nextcollisionrecipe": "Show next colliding recipe",
|
||||
"block.engineersdecor.treated_wood_crafting_table.tooltips.prev": "Previous crafting history recipe",
|
||||
"block.engineersdecor.treated_wood_crafting_table.tooltips.toplayer": "Clear grid to player inventory",
|
||||
"block.engineersdecor.treated_wood_crafting_table.tooltips.tostorage": "Clear grid to storage",
|
||||
"block.engineersdecor.treated_wood_floor": "Пол из обработанного дерева",
|
||||
"block.engineersdecor.treated_wood_floor.help": "§6Декоративная напольная плитка с текстурными вариациями.§r",
|
||||
"block.engineersdecor.treated_wood_ladder": "Лестница из обработанного дерева",
|
||||
|
|
|
@ -71,10 +71,28 @@
|
|||
"block.engineersdecor.dense_grit_sand_block.help": "§6A compressed sandy soil mixed with stone grid, as known from machine and storage yards.§r Flowers don't really grow on that. Position dependent texture variations.",
|
||||
"block.engineersdecor.factory_dropper": "工厂掉落器",
|
||||
"block.engineersdecor.factory_dropper.help": "§6适用于高级工厂自动化的掉落器。§r有十二个轮询选择的储物格。 掉落的力度、角度、一叠数量和冷却延时可在GUI调节。三个 内部比较槽带有逻辑与或逻辑或功能,可用作内部触发源。内部触发 还能和外部红石信号触发再进行逻辑与或逻辑或。触发模拟按钮仅作测试用途。 当内部触发条件满足时,预先打开卷帘门。所有符合条件的物品 会同时掉落。点击GUI的各处来了解如何运作。",
|
||||
"block.engineersdecor.factory_dropper.tooltips.direction": "Drop direction x/y (-45° to +45°)",
|
||||
"block.engineersdecor.factory_dropper.tooltips.dropcount": "Drop stack size (1 to 32 items)",
|
||||
"block.engineersdecor.factory_dropper.tooltips.externgate": "External signal combination logic (AND or OR)§r\n§8AND: Drop only on an external signal.\nOR: Drop filter matches automatically, non-matching items on external trigger.",
|
||||
"block.engineersdecor.factory_dropper.tooltips.filtergate": "Filter combination gate logic (AND or OR)§r\n§8AND: Drop the stacks as specified in the filters when ALL filters are green.\nOR: Drop the stack of each individual filter when green.",
|
||||
"block.engineersdecor.factory_dropper.tooltips.period": "Drop delay (1s to 10s)",
|
||||
"block.engineersdecor.factory_dropper.tooltips.rssignal": "External Redstone signal indicator\n §8(click to generate a test trigger).",
|
||||
"block.engineersdecor.factory_dropper.tooltips.triggermode": "Trigger mode (pulse/continuous)§r\n§8Pulse: One drop for each OFF->ON of the external signal.\nContinuous: Drop as long as the external signal is ON.",
|
||||
"block.engineersdecor.factory_dropper.tooltips.velocity": "Drop velocity (slow to fast speed)",
|
||||
"block.engineersdecor.factory_hopper": "工厂漏斗",
|
||||
"block.engineersdecor.factory_hopper.help": "§6适用于高级工厂自动化的漏斗。§r可一次传输半组物品,最大收集范围9x9。\n GUI滑动条:控制收集距离(0到4),插入延迟(0.5秒到10秒),插入一叠物品的大小(1到32)。\n GUI红石控制:不反相/反相(默认),脉冲模式/持续模式(默认)。",
|
||||
"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.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": "工厂方块放置器",
|
||||
"block.engineersdecor.factory_placer.help": "§6能够放置方块和种植作物或树。§r\n GUI红石控制:不反相/反相(默认),脉冲模式/持续模式(默认)。\n 也支持从耕地下方穿透方块种植。会吐出不能放置或种植的物品。",
|
||||
"block.engineersdecor.factory_placer.tooltips.inversion": "Inversion mode §8(inverted/not inverted)",
|
||||
"block.engineersdecor.factory_placer.tooltips.rssignal": "External Redstone signal indicator",
|
||||
"block.engineersdecor.factory_placer.tooltips.triggermode": "Trigger mode §8(continuous/pulse)",
|
||||
"block.engineersdecor.gas_concrete": "加气混凝土",
|
||||
"block.engineersdecor.gas_concrete.help": "§6低硬度,高产出的混凝土。§r容易破坏的装饰性混凝土方块。",
|
||||
"block.engineersdecor.gas_concrete_slab": "加气混凝土台阶",
|
||||
|
@ -159,6 +177,8 @@
|
|||
"block.engineersdecor.small_block_breaker.status": "SOC: %1$s%% of %2$sRF§r | progress: %3$s%%",
|
||||
"block.engineersdecor.small_electrical_furnace": "小型电炉",
|
||||
"block.engineersdecor.small_electrical_furnace.help": "§6小型金属封装穿过式熔炉。§r 自动从输入端获取物品并在输出端物品栏放置物品。 物品能从所有面使用漏斗插入或提取。无法熔炼或烹饪的物品会直接送到出口。 比加热的圆石炉有稍微高的能效比和更快。 先进先出和自动输出一次移动一组物品。自动输出需要一点能量。",
|
||||
"block.engineersdecor.small_electrical_furnace.tooltips.auxslot": "Auxiliary slot\n§8Place a Hopper here to enable automatic feeding from the input side.",
|
||||
"block.engineersdecor.small_electrical_furnace.tooltips.speed": "Smelting speed selection §8(OFF/I/II/III)",
|
||||
"block.engineersdecor.small_fluid_funnel": "小型流体收集漏斗",
|
||||
"block.engineersdecor.small_fluid_funnel.help": "§6收集上方的流体。§r有一个三桶大的内部储罐。会 追溯流体到附近的源方块。流体可被流体运输系统或桶 移出。只会装满下方的储罐(重力传输)。与原版 无限水兼容。",
|
||||
"block.engineersdecor.small_lab_furnace": "小型实验室炉",
|
||||
|
@ -207,6 +227,14 @@
|
|||
"block.engineersdecor.treated_wood_broad_windowsill.help": "§6简单的窗户装饰。",
|
||||
"block.engineersdecor.treated_wood_crafting_table": "防腐木合成台",
|
||||
"block.engineersdecor.treated_wood_crafting_table.help": "§6坚固,防风防雨。§r内含八个存储格,破坏后保留内容物,没有原版合成书。\n 单击上/下箭头按钮可选择合成历史,单击输出格自动放置物品,单击X按钮 清除合成栏和历史。Shift单击一叠物品:合成格空时转移到存储格, 非空时到合成栏。会自动分配转移的物品。",
|
||||
"block.engineersdecor.treated_wood_crafting_table.tooltips.clear": "Clear grid to player inventory",
|
||||
"block.engineersdecor.treated_wood_crafting_table.tooltips.fromplayer": "Move items from player inventory",
|
||||
"block.engineersdecor.treated_wood_crafting_table.tooltips.fromstorage": "Move items from storage",
|
||||
"block.engineersdecor.treated_wood_crafting_table.tooltips.next": "Next crafting history recipe",
|
||||
"block.engineersdecor.treated_wood_crafting_table.tooltips.nextcollisionrecipe": "Show next colliding recipe",
|
||||
"block.engineersdecor.treated_wood_crafting_table.tooltips.prev": "Previous crafting history recipe",
|
||||
"block.engineersdecor.treated_wood_crafting_table.tooltips.toplayer": "Clear grid to player inventory",
|
||||
"block.engineersdecor.treated_wood_crafting_table.tooltips.tostorage": "Clear grid to storage",
|
||||
"block.engineersdecor.treated_wood_floor": "防腐木地板",
|
||||
"block.engineersdecor.treated_wood_floor.help": "§6装饰性地板砖,有可变的贴图。§r",
|
||||
"block.engineersdecor.treated_wood_ladder": "防腐木梯",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue