Block hardness adaptions (issue #32). Lang files updated. Build utils enhanced to prepare code release for 1.13/1.14.

This commit is contained in:
stfwi 2019-06-22 22:53:51 +02:00
parent 8af8544e30
commit 0a310c4261
19 changed files with 1221 additions and 618 deletions

View file

@ -28,7 +28,7 @@ wildcardr=$(foreach d,$(wildcard $1*),$(call wildcardr,$d/,$2) $(filter $(subst
#
# Targets
#
.PHONY: default mod init clean clean-all all run install sanatize dist-check dist start-server
.PHONY: default mod init clean clean-all mrproper all run install sanatize dist-check dist start-server port-languages
default: mod
@ -46,8 +46,17 @@ clean:
clean-all: clean
@echo "[1.12] Cleaning using gradle ..."
@rm -f dist/*
@rm -rf run/logs/
@rm -rf run/crash-reports/
@$(GRADLE) clean cleanCache
mrproper: clean-all
@rm -rf meta/*
@rm -rf run/
@rm -rf out/
@rm -f .project
@rm -f .classpath
init:
@echo "[1.12] Initialising eclipse workspace using gradle ..."
@$(GRADLE) setupDecompWorkspace
@ -90,3 +99,7 @@ dist: sanatize dist-check clean-all mod
@mkdir -p dist
@cp build/libs/$(MOD_JAR_PREFIX)* dist/
@djs tasks.js dist
port-languages:
@echo "[1.12] Porting language files to 1.13/1.14 ..."
@djs tasks.js port-languages

View file

@ -24,6 +24,11 @@ archivesBaseName = "engineersdecor-${version_minecraft}"
def signing = { ->
def sp = new Properties()
sp.keystore_file = project.keystore_file
sp.keystore_alias = project.keystore_alias
sp.keystore_pass = project.keystore_pass
sp.keystore_keypass = project.keystore_keypass
sp.fingerprint_sha1 = project.fingerprint_sha1
if(file("signing.properties").exists()) file("signing.properties").withInputStream { sp.load(it) }
return sp
}()

View file

@ -1,6 +1,7 @@
{
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
"1.12.2": {
"1.0.9-b1": "[U] Lang file ru_ru updated (PR#31, yaroslav4167).\n[M] Block hardness adaptions (issue #32).",
"1.0.8": "[R] Release based on v1.0.8-b2. Release-to-release changes: * Added factory area sign. * Added stained clinker. * Config opt-out fixes, detailed feature selection possible now. * Recipe adaptions and fixes. * Lang files updated.\n[A] Added stained clinker brick block/stairs. Can be mixed with \"normal\" clinkers.\n[A] Added opt-out option for CTRL-SHIFT tooltips.\n[M] Recipe condition requirements updated, recipes categorized.",
"1.0.8-b2": "[F] Config opt-out fixed (thx IronPiston for the report #30).\n[A] Added opt-out config for detailed including/excluding of features (using registry name wildcard matching).",
"1.0.8-b1": "[A] Added \"Factory area\" sign.\n[M] Electrical furnace recipe changed (hoppers to conveyors).\n[A] Opt-out config options added.\n[F] Lang file fixes for en_us (Angela, PR#29).",
@ -44,6 +45,6 @@
},
"promos": {
"1.12.2-recommended": "1.0.8",
"1.12.2-latest": "1.0.8"
"1.12.2-latest": "1.0.9-b1"
}
}

View file

@ -8,9 +8,10 @@ Mod sources for Minecraft version 1.12.2.
- Compiled mod distribution channel is curseforge: https://www.curseforge.com/minecraft/mc-mods/engineers-decor/files.
----
## Revision history
## Version history
~ v1.0.9-b1 [U] Lang file ru_ru updated (PR#31, yaroslav4167).
- v1.0.9-b1 [U] Lang file ru_ru updated (PR#31, yaroslav4167).
[M] Block hardness adaptions (issue #32).
-------------------------------------------------------------------
- v1.0.8 [R] Release based on v1.0.8-b2. Release-to-release changes:

View file

@ -90,28 +90,28 @@ public class ModBlocks
public static final BlockDecorStraightPole THIN_STEEL_POLE = new BlockDecorStraightPole(
"thin_steel_pole",
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT,
Material.IRON, 1.0f, 15f, SoundType.METAL,
Material.IRON, 2.0f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(6,6,0, 10,10,16)
);
public static final BlockDecorStraightPole THIN_STEEL_POLE_HEAD = new BlockDecorStraightPole(
"thin_steel_pole_head",
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_IF_SAME,
Material.IRON, 1.0f, 15f, SoundType.METAL,
Material.IRON, 2.0f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(6,6,0, 10,10,16)
);
public static final BlockDecorStraightPole THICK_STEEL_POLE = new BlockDecorStraightPole(
"thick_steel_pole",
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT,
Material.IRON, 1.0f, 15f, SoundType.METAL,
Material.IRON, 2.0f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(5,5,0, 11,11,16)
);
public static final BlockDecorStraightPole THICK_STEEL_POLE_HEAD = new BlockDecorStraightPole(
"thick_steel_pole_head",
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_IF_SAME,
Material.IRON, 1.0f, 15f, SoundType.METAL,
Material.IRON, 2.0f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(5,5,0, 11,11,16)
);
@ -139,7 +139,7 @@ public class ModBlocks
public static final BlockDecorDirected INSET_LIGHT_IRON = new BlockDecorDirected(
"iron_inset_light",
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_OPPOSITE_PLACEMENT|(14<<BlockDecor.CFG_LIGHT_VALUE_SHIFT),
Material.IRON, 0.3f, 15f, SoundType.METAL,
Material.IRON, 0.5f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(5.2,5.2,15.7, 10.8,10.8,16.0)
);
@ -168,14 +168,14 @@ public class ModBlocks
"small_lab_furnace",
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|
BlockDecor.CFG_ELECTRICAL,
Material.IRON, 0.35f, 15f, SoundType.METAL,
Material.IRON, 0.5f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(1,0,1, 15,15,16)
);
public static final BlockDecorFurnaceElectrical SMALL_ELECTRICAL_FURNACE = new BlockDecorFurnaceElectrical(
"small_electrical_furnace",
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_ELECTRICAL,
Material.IRON, 0.35f, 15f, SoundType.METAL,
Material.IRON, 0.5f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,16)
);
@ -189,7 +189,7 @@ public class ModBlocks
public static final BlockDecorHorizontalSupport STEEL_DOUBLE_T_SUPPORT = new BlockDecorHorizontalSupport(
"steel_double_t_support",
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT,
Material.IRON, 0.5f, 15f, SoundType.METAL,
Material.IRON, 2.0f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(5,11,0, 11,16,16)
);
@ -197,7 +197,7 @@ public class ModBlocks
"straight_pipe_valve",
BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK|
BlockDecor.CFG_CUTOUT,
Material.IRON, 0.35f, 15f, SoundType.METAL,
Material.IRON, 0.5f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16)
);
@ -205,7 +205,7 @@ public class ModBlocks
"straight_pipe_valve_redstone",
BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK|
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_REDSTONE_CONTROLLED,
Material.IRON, 0.35f, 15f, SoundType.METAL,
Material.IRON, 0.5f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16)
);
@ -213,7 +213,7 @@ public class ModBlocks
"straight_pipe_valve_redstone_analog",
BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK|
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_REDSTONE_CONTROLLED|BlockDecor.CFG_ANALOG,
Material.IRON, 0.35f, 15f, SoundType.METAL,
Material.IRON, 0.5f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16)
);
@ -221,7 +221,7 @@ public class ModBlocks
"passive_fluid_accumulator",
BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK|
BlockDecor.CFG_CUTOUT,
Material.IRON, 0.35f, 15f, SoundType.METAL,
Material.IRON, 0.5f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,16)
);
@ -263,7 +263,7 @@ public class ModBlocks
public static final BlockDecorDropper FACTORY_DROPPER = new BlockDecorDropper(
"factory_dropper",
BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_REDSTONE_CONTROLLED,
Material.IRON, 0.3f, 15f, SoundType.METAL,
Material.IRON, 0.5f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,15)
);
@ -282,37 +282,37 @@ public class ModBlocks
public static final BlockDecorHalfSlab HALFSLAB_CONCRETE = new BlockDecorHalfSlab(
"halfslab_concrete",
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HARD_IE_DEPENDENT,
Material.ROCK, 0.4f, 10f, SoundType.STONE
Material.ROCK, 1.0f, 10f, SoundType.STONE
);
public static final BlockDecorHalfSlab HALFSLAB_TREATEDWOOD = new BlockDecorHalfSlab(
"halfslab_treated_wood",
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HARD_IE_DEPENDENT,
Material.WOOD, 0.4f, 4f, SoundType.WOOD
Material.WOOD, 0.6f, 4f, SoundType.WOOD
);
public static final BlockDecorHalfSlab HALFSLAB_SHEETMETALIRON = new BlockDecorHalfSlab(
"halfslab_sheetmetal_iron",
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HARD_IE_DEPENDENT,
Material.IRON, 0.4f, 10f, SoundType.METAL
Material.IRON, 0.8f, 10f, SoundType.METAL
);
public static final BlockDecorHalfSlab HALFSLAB_SHEETMETALSTEEL = new BlockDecorHalfSlab(
"halfslab_sheetmetal_steel",
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HARD_IE_DEPENDENT,
Material.IRON, 0.4f, 10f, SoundType.METAL
Material.IRON, 0.8f, 10f, SoundType.METAL
);
public static final BlockDecorHalfSlab HALFSLAB_SHEETMETALCOPPER = new BlockDecorHalfSlab(
"halfslab_sheetmetal_copper",
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HARD_IE_DEPENDENT,
Material.IRON, 0.4f, 10f, SoundType.METAL
Material.IRON, 0.8f, 10f, SoundType.METAL
);
public static final BlockDecorHalfSlab HALFSLAB_SHEETMETALGOLD = new BlockDecorHalfSlab(
"halfslab_sheetmetal_gold",
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HARD_IE_DEPENDENT,
Material.IRON, 0.4f, 10f, SoundType.METAL
Material.IRON, 0.6f, 10f, SoundType.METAL
);
public static final BlockDecorHalfSlab HALFSLAB_SHEETMETALALUMINIUM = new BlockDecorHalfSlab(
"halfslab_sheetmetal_aluminum",
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HARD_IE_DEPENDENT,
Material.IRON, 0.4f, 10f, SoundType.METAL
Material.IRON, 0.6f, 10f, SoundType.METAL
);
//--------------------------------------------------------------------------------------------------------------------

View file

@ -0,0 +1,165 @@
#
# Engineer's Decor lang file
#
#PARSE_ESCAPES
#
#-----------------------------------------------------------------------------------------------------------
itemGroup.tabengineersdecor=工程师的装饰
engineersdecor.config.title=工程师的装饰配置
engineersdecor.tooltip.hint.extended=§6[按§9SHIFT§r获取更多信息§6]§r
engineersdecor.tooltip.hint.help=§6[按§9CTRL-SHIFT§r获取帮助§6]§r
#-----------------------------------------------------------------------------------------------------------
# Stone/"ceramic material" based blocks
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.clinker_brick_block.name=熟料砖
tile.engineersdecor.clinker_brick_block.help=§6具有位置相关纹理变化的砖块.§r\n看起来比原版砖块稍暗,颜色更浓.
tile.engineersdecor.clinker_brick_stained_block.name=Stained Clinker Brick Block
#tile.engineersdecor.clinker_brick_stained_block.help=§6A brick block with position dependent texture variations.§r\nLooks slightly darker and more color intensive than the vanilla brick block. Has more visible traces of grime or stain.
tile.engineersdecor.slag_brick_block.name=炉渣砖
tile.engineersdecor.slag_brick_block.help=§6灰褐色砖块,具有位置相关的纹理变化.
tile.engineersdecor.rebar_concrete.name=钢筋混凝土
tile.engineersdecor.rebar_concrete.help=§6钢筋混凝土砌块.§r 昂贵,但像黑曜石一样防苦力怕.
tile.engineersdecor.panzerglass_block.name=Panzer Glass Block
#tile.engineersdecor.panzerglass_block.help=§6Reinforced glass block.§r Expensive, explosion-proof. Dark gray tint, faint structural lines visible, multi texture for seemless look.
tile.engineersdecor.rebar_concrete_tile.name=Rebar Concrete Tile
#tile.engineersdecor.rebar_concrete_tile.help=§6Steel reinforced concrete tile.§r Expensive but Creeper-proof like obsidian.
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.rebar_concrete_wall.name=钢筋混凝土墙
tile.engineersdecor.rebar_concrete_wall.help=§6钢筋混凝土墙.§r 昂贵,但像黑曜石一样防苦力怕.
tile.engineersdecor.concrete_wall.name=水泥墙
tile.engineersdecor.concrete_wall.help=§6墙由坚固的混凝土制成.
tile.engineersdecor.clinker_brick_wall.name=Clinker Brick Wall
#tile.engineersdecor.clinker_brick_wall.help=§6Simplistic Clinker Brick Wall.
tile.engineersdecor.slag_brick_wall.name=Slag Brick Wall
#tile.engineersdecor.slag_brick_wall.help=§6Simplistic Slag Brick Wall.
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.metal_rung_ladder.name=金属环梯
tile.engineersdecor.metal_rung_ladder.help=§6典型的工业墙梯,包括水平金属杆横档.
tile.engineersdecor.metal_rung_steps.name=交错的金属台阶
tile.engineersdecor.metal_rung_steps.help=§6贴在墙上的交错的杆横档,允许爬上,爬下等等.
tile.engineersdecor.treated_wood_ladder.name=经过处理的木梯
tile.engineersdecor.treated_wood_ladder.help=§6防风雨的木梯.
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.clinker_brick_stairs.name=熟料砖楼梯
tile.engineersdecor.clinker_brick_stairs.help=§6看起来比原版砖块稍暗,颜色更浓.
tile.engineersdecor.clinker_brick_stained_stairs.name=Stained Clinker Brick Stairs
#tile.engineersdecor.clinker_brick_stained_stairs.help=§6Looks slightly darker and more color intensive than the vanilla brick block. Has more visible traces of grime or stain.
tile.engineersdecor.slag_brick_stairs.name=炉渣砖楼梯
tile.engineersdecor.slag_brick_stairs.help=§6灰褐色砖块楼梯.
tile.engineersdecor.rebar_concrete_stairs.name=钢筋混凝土楼梯
tile.engineersdecor.rebar_concrete_stairs.help=§6钢筋混凝土楼梯.§r 昂贵,但像黑曜石一样防苦力怕.
tile.engineersdecor.rebar_concrete_tile_stairs.name=Rebar Concrete Tile Stairs
#tile.engineersdecor.rebar_concrete_tile_stairs.help=§6Steel reinforced concrete tile stairs.§r Expensive but Creeper-proof like obsidian.
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.treated_wood_pole.name=直立处理木杆
tile.engineersdecor.treated_wood_pole.help=§6具有导线继电器直径的直极片段.§r\n如果需要特殊的特殊长度,或作为结构的支撑,可以作为线柱的替代品.
tile.engineersdecor.treated_wood_pole_head.name=Straight Treated Wood Pole Head/Foot
#tile.engineersdecor.treated_wood_pole_head.help=§6Wooden part fitting as foot or head of straight poles.
tile.engineersdecor.treated_wood_pole_support.name=Straight Treated Wood Pole Support
#tile.engineersdecor.treated_wood_pole_support.help=§6Heavy duty wooden support part fitting as foot or head of straight poles.
tile.engineersdecor.thick_steel_pole.name=Straight Thick Steel Pole
#tile.engineersdecor.thick_steel_pole.help=§6Straight hollow pole fragment (6x6x16) for structural support purposes.
tile.engineersdecor.thin_steel_pole.name=Straight Thin Steel Pole
#tile.engineersdecor.thin_steel_pole.help=§6Straight hollow pole fragment (4x4x16) for structural support purposes.
tile.engineersdecor.thin_steel_pole_head.name=Straight Thin Steel Pole head/foot
#tile.engineersdecor.thin_steel_pole_head.help=§6Steel part fitting as foot or head of the thin steel pole (4x4x16).
tile.engineersdecor.thick_steel_pole_head.name=Straight Thick Steel Pole Head/Foot
#tile.engineersdecor.thick_steel_pole_head.help=§6Steel part fitting as foot or head of the thick steel pole (6x6x16).
tile.engineersdecor.steel_double_t_support.name=Steel Double T Support
#tile.engineersdecor.steel_double_t_support.help=§6Horizontal ceiling support bream fragment.
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.treated_wood_table.name=经过处理的木桌
tile.engineersdecor.treated_wood_table.help=§6坚固的四足木桌.
tile.engineersdecor.treated_wood_stool.name=Treated Wood Stool
#tile.engineersdecor.treated_wood_stool.help=§6Robust Wood Stool.§r Indoor and outdoor use.
tile.engineersdecor.treated_wood_crafting_table.name=Treated Wood Crafting Table
#tile.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.
tile.engineersdecor.iron_inset_light.name=Inset Light
#tile.engineersdecor.iron_inset_light.help=§6Small glowstone light source, sunk into the floor, ceiling or wall.§r\n\
Useful to light up places where electrical light installations are problematic.\
Light level like a torch.
tile.engineersdecor.treated_wood_window.name=Treated Wood Window
#tile.engineersdecor.treated_wood_window.help=§6Wood framed triple glazed window. Well insulating.§r Does not connect to adjacent blocks like glass panes.
tile.engineersdecor.treated_wood_windowsill.name=Treated Wood Window Sill
#tile.engineersdecor.treated_wood_windowsill.help=§6Simple window decoration.
tile.engineersdecor.steel_framed_window.name=Steel Framed Window
#tile.engineersdecor.steel_framed_window.help=§6Steel framed triple glazed window. Well insulating. §r Does not connect to adjacent blocks like glass panes.
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.small_lab_furnace.name=Small Laboratory Furnace
#tile.engineersdecor.small_lab_furnace.help=§6Small metal cased lab kiln.§r Solid fuel consuming, updraught. \
Slightly hotter and better isolated than a cobblestone furnace, therefore more efficient. \
Two auxiliary slots e.g. for storage. Two stack internal hopper fifos for input, output, \
and fuel. Place an external heater into a aux slot and connect power for electrical \
smelting speed boost.
tile.engineersdecor.small_electrical_furnace.name=Small Electrical Furnace
#tile.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.
tile.engineersdecor.small_waste_incinerator.name=Small Waste Incinerator
#tile.engineersdecor.small_waste_incinerator.help=§6Trash with internal fifo slots.§r Items can be inserted on all sides, and are kept until \
there is no space left in the fifo. After that the oldest stack will be incinerated. Apply \
electrical RF/FE power to increase the processing speed. Keeps its inventory when being \
relocated.
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.straight_pipe_valve.name=Fluid Pipe Check Valve
#tile.engineersdecor.straight_pipe_valve.help=§6Straight fluid pipe fragment.§r Conducts fluids only in one direction. \
Does not connect to the sides. Reduces flow rate. Sneak to place in reverse direction.
tile.engineersdecor.straight_pipe_valve_redstone.name=Redstone Controlled Fluid Valve
#tile.engineersdecor.straight_pipe_valve_redstone.help=§6Straight fluid pipe fragment.§r Conducts fluids only in one direction. \
Does not connect to the sides. Sneak to place in reverse direction. \
Blocks if not redstone powered.
tile.engineersdecor.straight_pipe_valve_redstone_analog.name=Redstone Analog Fluid Valve
#tile.engineersdecor.straight_pipe_valve_redstone_analog.help=§6Straight fluid pipe fragment.§r Conducts fluids only in one direction. \
Does not connect to the sides. Sneak to place in reverse direction. \
Blocks if not redstone powered, reduces the flow rate linear from power 1 to 14, \
opens to maximum possible valve flow rate for power 15.
tile.engineersdecor.passive_fluid_accumulator.name=Passive Fluid Accumulator
#tile.engineersdecor.passive_fluid_accumulator.help=§6Vacuum suction based fluid collector.§r Has one output, all other sides are input. \
Drains fluids from adjacent tanks when being drained from the output port by a pump.
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.factory_dropper.name=Factory Dropper
#tile.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 in the GUI. Three stack compare \
slots with logical AND or OR can be used as internal trigger source. 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. Click on all elements in the GUI to see how it works.
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.sign_decor.name=Sign Plate (Engineer's decor)
#tile.engineersdecor.sign_decor.help=§6This should not be craftable or visible in JEI. Used for creative tab and screenshots.
tile.engineersdecor.sign_hotwire.name=Sign "Caution Hot Wire"
#tile.engineersdecor.sign_hotwire.help=§6Electrical hazard warning. Don't forget to place around HV, or you'll have a mark in the next audit.
tile.engineersdecor.sign_mindstep.name=Sign "Mind The Step"
#tile.engineersdecor.sign_mindstep.help=§6Placable on walls (horizontally).
tile.engineersdecor.sign_danger.name=Sign "Caution Really Dangerous There"
#tile.engineersdecor.sign_danger.help=§6General danger warning.
tile.engineersdecor.sign_defense.name=Sign "Caution Defense System Ahead"
#tile.engineersdecor.sign_defense.help=§6Warning sign for turrets, Tesla Coils, and traps.
tile.engineersdecor.sign_factoryarea.name=Sign "Factory Area"
#tile.engineersdecor.sign_factoryarea.help=§6Marker sign for buildings or areas where the really big machines are.
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.halfslab_rebar_concrete.name=Rebar Concrete Slice
#tile.engineersdecor.halfslab_rebar_concrete.help=§6Vertically stackable slice.§r Right/left click with the slice stack on the top or bottom surface to add/remove slices.
tile.engineersdecor.halfslab_concrete.name=Concrete Slice
#tile.engineersdecor.halfslab_concrete.help=§6Vertically stackable slice.§r Right/left click with the slice stack on the top or bottom surface to add/remove slices.
tile.engineersdecor.halfslab_treated_wood.name=Treated Wood Slice
#tile.engineersdecor.halfslab_treated_wood.help=§6Vertically stackable slice.§r Right/left click with the slice stack on the top or bottom surface to add/remove slices.
tile.engineersdecor.halfslab_sheetmetal_iron.name=Iron Sheet Metal Slice
#tile.engineersdecor.halfslab_sheetmetal_iron.help=§6Vertically stackable slice.§r Right/left click with the slice stack on the top or bottom surface to add/remove slices.
tile.engineersdecor.halfslab_sheetmetal_steel.name=Steel Sheet Metal Slice
#tile.engineersdecor.halfslab_sheetmetal_steel.help=§6Vertically stackable slice.§r Right/left click with the slice stack on the top or bottom surface to add/remove slices.
tile.engineersdecor.halfslab_sheetmetal_copper.name=Copper Sheet Metal Slice
#tile.engineersdecor.halfslab_sheetmetal_copper.help=§6Vertically stackable slice.§r Right/left click with the slice stack on the top or bottom surface to add/remove slices.
tile.engineersdecor.halfslab_sheetmetal_gold.name=Gold Sheet Metal Slice
#tile.engineersdecor.halfslab_sheetmetal_gold.help=§6Vertically stackable slice.§r Right/left click with the slice stack on the top or bottom surface to add/remove slices.
tile.engineersdecor.halfslab_sheetmetal_aluminum.name=Aluminum Sheet Metal Slice
#tile.engineersdecor.halfslab_sheetmetal_aluminum.help=§6Vertically stackable slice.§r Right/left click with the slice stack on the top or bottom surface to add/remove slices.
#-----------------------------------------------------------------------------------------------------------
# EOF
#-----------------------------------------------------------------------------------------------------------

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -1,349 +1,25 @@
#!/usr/bin/djs
// Note for reviewers/clones: This file is a auxiliary script for my setup. It's not needed to build the mod.
"use strict";
if(!fs.chdir(fs.dirname(fs.realpath(sys.script)))) throw new Error("Failed to switch to mod source directory.");
if(!fs.isdir("../.git")) throw new Error("Missing git repository in parent directory of mod source.");
const constants = include("../meta/lib/constants.js")();
const libtask = include("../meta/lib/libtask.js")(constants);
const liblang = include("../meta/lib/liblang.1.12.js")(constants);
const liblang13 = include("../meta/lib/liblang.1.13.js")(constants);
const liblang14 = include("../meta/lib/liblang.1.13.js")(constants);
var tasks = {};
tasks["dist-check"] = function() {
const uncommitted_changes = sys.shell("git status -s").trim();
const gittags = sys.shell('git log -1 --format="%D"')
.replace(/[\s]/g,"").split(",")
.filter(function(s){ return s.indexOf("tag:")==0;})
.map(function(s){ return s.replace(/^tag:/,"");});
const version_engineersdecor = fs.readfile("gradle.properties", function(line){
if(line.trim().indexOf("version_engineersdecor")!=0) return false;
return line.replace(/^.*?=/,"").trim()
}).trim();
const git_remote = sys.shell("git remote -v").trim();
const git_branch = sys.shell("git rev-parse --abbrev-ref HEAD").trim();
const git_diff = sys.shell("git diff .").trim();
var fails = [];
if(version_engineersdecor=="") fails.push("Could not determine 'version_engineersdecor' from gradle properties.");
if(!gittags.length) fails.push("Version not tagged.");
if(!gittags.filter(function(s){return s.indexOf(version_engineersdecor.replace(/[-]/g,""))>=0}).length) fails.push("No tag version not found matching the gradle properties version.");
if(git_remote.replace(/[\s]/g,"").indexOf("git@github.com:stfwi/engineers-decor.git(push)") < 0) fails.push("Not the reference repository.");
if((git_branch != "develop") && (git_branch != "master")) {
fails.push("No valid branch for dist. (branch:'"+git_branch+"')");
} else if((git_branch == "develop") && (version_engineersdecor.replace(/[^ab]/g,"")=="")) {
fails.push("Cannot make release dist on develop branch.");
} else if((git_branch == "master") && (version_engineersdecor.replace(/[^ab]/g,"")!="")) {
fails.push("Cannot make beta dist on master branch.");
}
if(git_diff !== "") fails.push("Not everything committed to the GIT repository.");
if((!fs.isfile("signing.jks")) || (!fs.isfile("signing.properties"))) fails.push("Jar signing files missing.");
if(fails.length>0) {
for(var i in fails) fails[i] = " - " + fails[i];
alert("Dist check failed");
alert(fails.join("\n")+"\n");
exit(1);
}
};
tasks["sync-languages"] = function() {
function load() {
var lang_data = {};
fs.find("./src/main/resources/assets/engineersdecor/lang", '*.lang', function(f){
var lang_code = fs.basename(f).replace(/\..*$/,"").trim().toLowerCase();
var lines = fs.readfile(f).trim().split("\n");
var was_eol_escape = false;
for(var i in lines) {
if(was_eol_escape) {
var k=0;
for(k=i-1; k>=0; --k) {
if(lines[k] != null) {
lines[k] += "\n" + lines[i];
break;
}
}
was_eol_escape = lines[i].match(/[^\\][\\]$/) != null;
lines[i] = null;
} else {
lines[i] = lines[i].trim();
was_eol_escape = lines[i].match(/[^\\][\\]$/) != null;
}
}
lang_data[lang_code] = lines.filter(function(l){return (l!==null);});
return false;
});
return lang_data;
}
function reference_content(lang_data, reflang_code) {
var lang_lines = [];
for(var i in lang_data[reflang_code]) {
var txt = lang_data[reflang_code][i].trim();
if((txt.search(/^#/)>=0) || (txt.search("=")<0)) { lang_lines.push(txt); continue; }; // comment "#" or empty line in the ref lang file
var kv = txt.split("=", 2);
var key = kv[0].trim();
var val = kv[1].trim();
var o = {key:key, tr:{}};
o.tr[reflang_code] = val;
lang_lines.push(o);
}
delete lang_data[reflang_code];
return lang_lines;
}
function add_language(lang_lines, lang_name, lang_data) {
const find_line = function(lines, key) {
for(var i in lines) {
if((typeof(lines[i]) !== "object")) continue;
if(lines[i].key.toLowerCase()==key.toLowerCase()) return i;
}
return -1;
};
for(var i in lang_data) {
var txt = lang_data[i].trim();
if(txt.search(/^#/)>=0) continue;
if(txt.search("=")<0) continue;
var kv = txt.split("=", 2);
var key = kv[0].trim();
var val = kv[1].trim();
var line_i = find_line(lang_lines, key);
if(line_i >= 0) {
lang_data[i] = undefined;
lang_lines[line_i].tr[lang_name] = val;
}
}
return lang_data;
}
function complete_lang_lines(lang_lines, lang_names, reflang_code) {
var lang_outputs = {};
for(var i in lang_names) lang_outputs[lang_names[i]] = [];
for(var i_line in lang_lines) {
var entry = lang_lines[i_line];
if(typeof(entry) !== "object") {
for(var i in lang_names) lang_outputs[lang_names[i]].push(entry);
} else {
for(var i in lang_names) {
var name = lang_names[i];
if(entry.tr[name] !== undefined) {
lang_outputs[name].push(entry.key + "=" + entry.tr[name]);
} else {
var added = entry.key + "=" + entry.tr[reflang_code];
if((entry.key.search(/\.tip$/)>0) || (entry.key.search(/\.help$/)>0)) added = "#" + added;
lang_outputs[name].push(added);
if(added.search(/^#/)<0) print("[warn] Lang: Added default language for missing entry in " + name + ": '" + added + "'");
}
}
}
}
return lang_outputs;
}
const reflang_code = "en_us";
var lang_data = load();
var lang_names = Object.keys(lang_data);
var lang_lines = reference_content(lang_data, reflang_code);
for(var lang_name in lang_data) {
lang_data[lang_name] = add_language(lang_lines, lang_name, lang_data[lang_name]);
lang_data[lang_name] = lang_data[lang_name].filter(function(l){ return !!l; });
if(lang_data[lang_name].length == 0) delete lang_data[lang_name];
}
var output_data = complete_lang_lines(lang_lines, lang_names, reflang_code);
for(var i in output_data) output_data[i] = output_data[i].join("\n") + "\n\n";
// Remaining lines in lang files (not in the reference lang file)
for(var lang_name in lang_data) {
for(var i in lang_data[lang_name]) {
if(lang_data[lang_name][i].search(/^#/)<0) {
var added = "# " + lang_data[lang_name][i].replace(/^[#\s]+/,"");
output_data[lang_name] += added + "\n";
print("[warn] Lang: Commented out unknown key in " + lang_name + ": '" + added + "'");
}
}
}
for(var name in output_data) output_data[name] = output_data[name].trim() + "\n";
for(var name in output_data) {
fs.writefile("./src/main/resources/assets/engineersdecor/lang/" + name + ".lang", output_data[name]);
}
liblang.sync_languages();
};
tasks["tabs-to-spaces"] = function() {
var file_list = (function() {
var ls = [];
const ext = ['java','lang'];
for(var i in ext) ls = ls.concat(fs.find("./src", '*.'+ext[i]));
for(var i in ls) ls[i] = ls[i].replace(/\\/g,"/");
ls.sort();
ls.push("readme.md");
return ls;
})();
for(var file_i in file_list) {
var file = file_list[file_i];
var txt = fs.readfile(file);
if(txt===undefined) throw new Error("Failed to read '" + file + "'");
const txt_length = txt.length;
txt = txt.replace(/[\t]/g," ");
const n = txt.length - txt_length;
if(n > 0) {
print("File '" + file + "': Changed " + n + " tabs to 2 spaces." );
fs.writefile(file, txt);
}
}
};
tasks["trailing-whitespaces"] = function() {
var file_list = (function() {
var ls = [];
const ext = ['java','json','lang'];
for(var i in ext) ls = ls.concat(fs.find("./src", '*.'+ext[i]));
for(var i in ls) ls[i] = ls[i].replace(/\\/g,"/");
ls.sort();
ls.push("readme.md");
return ls;
})();
for(var file_i in file_list) {
var file = file_list[file_i];
var txt = fs.readfile(file);
if(txt===undefined) throw new Error("Failed to read '" + file + "'");
const txt_length = txt.length;
txt = txt.replace(/[\r\t ]+[\n]/g,"\n");
const n = txt_length - txt.length;
if(n > 0) {
print("File '" + file + "': Fixed " + n + " lines with trailing whitespaces." );
fs.writefile(file, txt);
}
}
};
tasks["version-check"] = function() {
var version_minecraft="";
var version_forge="";
var version_engineersdecor="";
fs.readfile("gradle.properties", function(line){
if(line.search(/^[\s]*version_minecraft[\s]*=/i) >= 0) {
version_minecraft = line.replace(/^[^=]+=/,"").trim();
} else if(line.search(/^[\s]*version_forge[\s]*=/i) >= 0) {
version_forge = line.replace(/^[^=]+=/,"").trim();
} else if(line.search(/^[\s]*version_engineersdecor[\s]*=/i) >= 0) {
version_engineersdecor = line.replace(/^[^=]+=/,"").trim();
}
tasks["port-languages"] = function() {
fs.find("src/main/resources/assets/"+ constants.mod_registry_name() +"/lang", '*.lang', function(path){
const unified = liblang.load(path);
path = path.replace(/\.lang$/,"");
liblang13.save("../1.13/"+path+".json", unified);
liblang14.save("../1.14/"+path+".json", unified);
return false;
})
const combined_version = version_minecraft + "-" + version_engineersdecor;
var readme_version_found = fs.readfile("readme.md", function(line){
var m = line.match(/^[\s]+[-~][\s]+v([\d]+[\.][\d]+[\.][\d]+[-][abrc][\d]+)/i);
if((!m) || (!m.length) || (m.length < 2)) {
m = line.match(/^[\s]+[-~][\s]+v([\d]+[\.][\d]+[\.][\d]+)/i);
if((!m) || (!m.length) || (m.length < 2)) return false;
}
return m[1]==version_engineersdecor;
});
var ok=true;
if(!readme_version_found) {
alert("Version 'v" + version_engineersdecor + "' not found in the readme changelog.");
ok = false;
}
if(!ok) {
alert("Version data:");
alert(" - combined_version : '" + combined_version + "'");
alert(" - version_forge : '" + version_forge + "'");
exit(1);
}
};
tasks["dist"] = function() {
function readme_history(file_path) {
var readme = fs.readfile(file_path);
if(!readme) throw new Error("Failed to load readme.md");
readme = readme.split(/[\r]?[\n]/);
while((readme.length > 0) && readme[0].search(/^## Revision history/i)<0) readme.shift();
while((readme.length > 0) && readme[0].trim()=="") readme.shift();
// revision history section
if(!readme.length) throw new Error("Revision history section not found in readme");
readme.shift();
var end_of_history = readme.length;
for(var i=0; i<readme.length; ++i) if(readme[i].search(/^---/) >= 0) { end_of_history=i; break; }
if(end_of_history >= readme.length) throw new Error("Could not find the end-of-history header marker.");
// remove empty lines, splitters
while(readme.length >= end_of_history) readme.pop();
while((readme.length >0) && (readme[readme.length-1].replace(/[\s-]/g,"")=="")) readme.pop();
const min_indent = readme
.map(function(s){return s.search(/[^\s]/)})
.filter(function(e){return e>=0})
.reduce(function(acc,e){return (e<acc)?e:acc});
if(min_indent > 1) {
for(var i in readme) { readme[i] = readme[i].substr(min_indent-2); }
}
return readme.join("\n");
}
const html = "<pre>\n" + (readme_history("readme.md").replace(/&/g, "&amp;").replace(/>/g, "&gt;").replace(/</g, "&lt;")) + "\n</pre>";
fs.writefile("dist/revision-history.html", html);
};
tasks["update-json"] = function() {
const root_dir = fs.cwd();
function read_history() {
var readme = fs.readfile(root_dir + "/readme.md");
if(!readme) throw new Error("Failed to load readme.md");
readme = readme.split(/[\r]?[\n]/);
while((readme.length > 0) && readme[0].search(/^## Revision history/i)<0) readme.shift();
// revision history section
if(!readme.length) throw new Error("Revision history section not found in readme");
readme.shift();
var end_of_history = readme.length;
for(var i=0; i<readme.length; ++i) if(readme[i].search(/^---/) >= 0) { end_of_history=i; break; }
if(end_of_history >= readme.length) throw new Error("Could not find the end-of-history header marker.");
// remove empty lines, splitters
while(readme.length >= end_of_history) readme.pop();
for(var i in readme) readme[i] = readme[i].replace(/[\s]+$/g,"").replace(/[\t]/g," ");
readme = readme.filter(function(a){return a.replace(/[\s-]+/g,"")!="";});
// condense multilines to single line entries for each fix or feature. ([A] ... [M] ...)
for(var i=readme.length-1; i>0; --i) {
var line = readme[i].replace(/^\s+/,"");
if(line.search(/^[\[\-]/) < 0) {
readme[i-1] += " " + line;
readme[i] = "";
}
}
readme = readme.filter(function(a){return a!="";});
// Condense log entries sepatated with newlines to one line for each version
for(var i=readme.length-1; i>0; --i) {
var line = readme[i].replace(/^\s+/,"");
if(line.search(/^[-~]/) < 0) {
readme[i-1] += "\n" + line;
readme[i] = "";
}
}
readme = readme.filter(function(a){return a!="";});
// Separate versions.
var history = {};
for(var i in readme) {
var line = readme[i].replace(/^[\sv-]+/g,"").trim();
var ver = line.substr(0, line.search(" ")).trim().toLowerCase();
var txt = line.substr(line.search(" ")).trim();
if(ver.search("~")===0) continue;
if(history[ver] !== undefined) throw new Error("Double definition of version '" + ver + "' in the readme revision history.");
history[ver] = txt;
}
return history;
}
var history = read_history();
var latest_release = "";
var latest_beta = "";
for(var ver in history) { latest_beta=ver; break; }
for(var ver in history) if(ver.search(/(rc|b|a)/) < 0) { latest_release=ver; break; }
var update_json = {
homepage: "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
"1.12.2": history,
promos: {
"1.12.2-recommended": latest_release,
"1.12.2-latest": latest_beta,
}
}
fs.mkdir(root_dir + "/meta");
fs.writefile(root_dir + "/meta/update.json", JSON.stringify(update_json, null, 2));
};
const task_name = sys.args[0];
if((task_name===undefined) || (tasks[task_name])===undefined) {
alert("No task ", task_name);
exit(1);
} else {
tasks[task_name]();
}
libtask.run(tasks, sys.args);