From f8442e36bfc8109759f9e1d34a061cd1b4ba1765 Mon Sep 17 00:00:00 2001 From: stfwi Date: Fri, 24 May 2019 22:20:55 +0200 Subject: [PATCH] Factory dropper fixes and logic simplifications. --- 1.12/gradle.properties | 2 +- 1.12/meta/update.json | 3 +- 1.12/readme.md | 4 + .../blocks/BlockDecorDropper.java | 123 ++++++++++-------- .../blocks/BlockDecorHorizontalSupport.java | 1 - .../assets/engineersdecor/lang/en_us.lang | 7 +- .../assets/engineersdecor/lang/ru_ru.lang | 7 +- .../blocks/device/factory_dropper_bottom.png | Bin 535 -> 556 bytes .../textures/gui/factory_dropper_gui.png | Bin 20850 -> 20895 bytes 1.13/.gitignore | 1 + 1.13/readme.md | 5 + Makefile | 2 +- meta/update.json | 6 +- 13 files changed, 101 insertions(+), 60 deletions(-) diff --git a/1.12/gradle.properties b/1.12/gradle.properties index 0128884..f7c63cd 100644 --- a/1.12/gradle.properties +++ b/1.12/gradle.properties @@ -4,4 +4,4 @@ org.gradle.jvmargs=-Xmx8G version_minecraft=1.12.2 version_forge=14.23.5.2768 version_jei=4.10.0.198 -version_engineersdecor=1.0.6 +version_engineersdecor=1.0.7-b1 diff --git a/1.12/meta/update.json b/1.12/meta/update.json index 9786b11..2e8f250 100644 --- a/1.12/meta/update.json +++ b/1.12/meta/update.json @@ -1,6 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.12.2": { + "1.0.7-b1": "[A] Factory dropper (config:experimental) button placement fixed, GUI vs external view x/y markers added, internal trigger logic simplified. Thx @overchoice for beta testing!", "1.0.6": "[R] Release based on v1.0.6-b1. Release-to-release changes: * Fixed FML remapping issue (COULD CAUSE CRASHES). * Small waste incinerator added. * Lang files updated/corrections. * Metal ladder easier to break.\n[A] Added factory dropper (config:experimental).\n[C] Thx to abdurraslan for the detailed issue #25.", "1.0.6-b1": "[A] Added small waste incinerator (delayed fifo-buffered item disposal).\n[M] Fixed item/block name capitalization (by Voxelo).\n[M] Metal ladders are easier to break/harvest.\n[F] Fixed FML remapping issue by using dedicated IItemHandler instances.", "1.0.5": "[R] Release based on v1.0.5-b1. Release-to-release changes: * Small electrical passthrough-furnace added. * Passive fluid accumulator added. * Config options added. * Sign plates added. * Minor bug fixes.\n[A] Added sign \"Electrical hazzard\"/\"Caution hot wire\".\n[A] Added sign \"Caution dangerous there\" (skull/bones).", @@ -38,6 +39,6 @@ }, "promos": { "1.12.2-recommended": "1.0.6", - "1.12.2-latest": "1.0.6" + "1.12.2-latest": "1.0.7-b1" } } \ No newline at end of file diff --git a/1.12/readme.md b/1.12/readme.md index b9ed8e2..d055883 100644 --- a/1.12/readme.md +++ b/1.12/readme.md @@ -10,6 +10,10 @@ Mod sources for Minecraft version 1.12.2. ---- ## Revision history + - v1.0.7-b1 [A] Factory dropper (config:experimental) button placement fixed, + GUI vs external view x/y markers added, internal trigger logic + simplified. Thx @overchoice for beta testing! + ------------------------------------------------------------------- - v1.0.6 [R] Release based on v1.0.6-b1. Release-to-release changes: * Fixed FML remapping issue (COULD CAUSE CRASHES). diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorDropper.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorDropper.java index 6d6142b..a4543fc 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorDropper.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorDropper.java @@ -8,6 +8,8 @@ */ package wile.engineersdecor.blocks; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.world.IBlockAccess; import net.minecraftforge.items.wrapper.SidedInvWrapper; import wile.engineersdecor.ModEngineersDecor; import wile.engineersdecor.detail.Networking; @@ -47,7 +49,6 @@ import net.minecraftforge.fml.relauncher.SideOnly; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.io.IOException; -import java.util.Arrays; public class BlockDecorDropper extends BlockDecorDirected { @@ -56,6 +57,10 @@ public class BlockDecorDropper extends BlockDecorDirected public BlockDecorDropper(@Nonnull String registryName, long config, @Nullable Material material, float hardness, float resistance, @Nullable SoundType sound, @Nonnull AxisAlignedBB unrotatedAABB) { super(registryName, config, material, hardness, resistance, sound, unrotatedAABB); } + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess world, IBlockState state, BlockPos pos, EnumFacing face) + { return BlockFaceShape.SOLID; } + @Override protected BlockStateContainer createBlockState() { return new BlockStateContainer(this, FACING, OPEN); } @@ -94,12 +99,13 @@ public class BlockDecorDropper extends BlockDecorDirected public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) { if(world.isRemote) return; - if((!stack.hasTagCompound()) || (!stack.getTagCompound().hasKey("inventory"))) return; - NBTTagCompound inventory_nbt = stack.getTagCompound().getCompoundTag("inventory"); - if(inventory_nbt.isEmpty()) return; + if((!stack.hasTagCompound()) || (!stack.getTagCompound().hasKey("tedata"))) return; + NBTTagCompound te_nbt = stack.getTagCompound().getCompoundTag("tedata"); + if(te_nbt.isEmpty()) return; final TileEntity te = world.getTileEntity(pos); if(!(te instanceof BlockDecorDropper.BTileEntity)) return; - ((BlockDecorDropper.BTileEntity)te).readnbt(inventory_nbt, false); + ((BlockDecorDropper.BTileEntity)te).readnbt(te_nbt, false); + ((BlockDecorDropper.BTileEntity)te).reset_rtstate(); ((BlockDecorDropper.BTileEntity)te).markDirty(); } @@ -110,11 +116,11 @@ public class BlockDecorDropper extends BlockDecorDirected TileEntity te = world.getTileEntity(pos); if(!(te instanceof BTileEntity)) return super.removedByPlayer(state, world, pos, player, willHarvest); ItemStack stack = new ItemStack(this, 1); - NBTTagCompound inventory_nbt = new NBTTagCompound(); - ItemStackHelper.saveAllItems(inventory_nbt, ((BTileEntity)te).stacks_, false); - if(!inventory_nbt.isEmpty()) { + NBTTagCompound te_nbt = new NBTTagCompound(); + ((BTileEntity) te).writenbt(te_nbt, false); + if(!te_nbt.isEmpty()) { NBTTagCompound nbt = new NBTTagCompound(); - nbt.setTag("inventory", inventory_nbt); + nbt.setTag("tedata", te_nbt); stack.setTagCompound(nbt); } world.spawnEntity(new EntityItem(world, pos.getX()+0.5, pos.getY()+0.5, pos.getZ()+0.5, stack)); @@ -132,7 +138,7 @@ public class BlockDecorDropper extends BlockDecorDirected for(ItemStack stack: ((BTileEntity)te).stacks_) { if(!stack.isEmpty()) world.spawnEntity(new EntityItem(world, pos.getX(), pos.getY(), pos.getZ(), stack)); } - ((BTileEntity)te).reset(); + ((BTileEntity)te).reset_rtstate(); super.onBlockExploded(world, pos, explosion); } @@ -465,8 +471,8 @@ public class BlockDecorDropper extends BlockDecorDirected private int drop_xdev_ = 0; private int drop_ydev_ = 0; private int drop_count_ = 1; - private int drop_logic_ = 0; - private int drop_period_ = 20; + private int drop_logic_ = DROPLOGIC_EXTERN_ANDGATE; + private int drop_period_ = 0; private int drop_slot_index_ = 0; private int tick_timer_ = 0; protected NonNullList stacks_; @@ -477,16 +483,15 @@ public class BlockDecorDropper extends BlockDecorDirected } public BTileEntity() - { reset(); } - - protected void reset() { stacks_ = NonNullList.withSize(NUM_OF_SLOTS, ItemStack.EMPTY); + reset_rtstate(); + } + + public void reset_rtstate() + { block_power_signal_ = false; block_power_updated_ = false; - drop_count_ = 1; - drop_period_ = 20; - drop_logic_ = DROPLOGIC_EXTERN_ANDGATE; for(int i=0; i= INPUT_SLOTS_SIZE) drop_slot_index_ = 0; int ic = drop_slot_index_; drop_slot_index_ = next_slot(drop_slot_index_); ItemStack ds = stacks_.get(ic); if((!ds.isEmpty()) && (ds.getCount() >= drop_count_)) { - filter_trigger_slots[0] = ic; + drop_stacks[0] = ds.splitStack(drop_count_); + stacks_.set(ic, ds); break; } } + } else { + for(int fi=0; fi 1) { + drop_stacks[fi] = stacks_.get(CTRL_SLOTS_FIRST+fi).copy(); + int ntoremove = drop_stacks[fi].getCount(); + for(int i=INPUT_SLOTS_SIZE-1; (i>=0) && (ntoremove>0); --i) { + ItemStack stack = stacks_.get(i); + if(!stack.isItemEqual(drop_stacks[fi])) continue; + if(stack.getCount() <= ntoremove) { + ntoremove -= stack.getCount(); + stacks_.set(i, ItemStack.EMPTY); + } else { + stack.shrink(ntoremove); + ntoremove = 0; + stacks_.set(i, stack); + } + } + if(ntoremove > 0) drop_stacks[fi].shrink(ntoremove); + } + } } // drop action - if(drop_timer_ <= 0) { - boolean dropped = false; - for(int i = 0; i < filter_trigger_slots.length; ++i) { - if(filter_trigger_slots[i] < 0) continue; - ItemStack ds = stacks_.get(filter_trigger_slots[i]); - if(ds.getCount() >= drop_count_) { - ItemStack drop_stack = ds.splitStack(drop_count_); - if(!drop_stack.isEmpty()) { - dirty = true; - drop(world, pos, state.getValue(FACING), drop_stack, drop_speed_, drop_xdev_, drop_ydev_, drop_noise_); - dropped = true; - } - } - } - // cooldown - if(dropped) drop_timer_ = DROP_PERIOD_OFFSET + drop_period_ * 2; // 0.1s time base -> 100%===10s - // drop sound - if(dropped && ((drop_logic_ & DROPLOGIC_SILENT_DROP) == 0)) { - world.playSound(null, pos, SoundEvents.BLOCK_CLOTH_STEP, SoundCategory.BLOCKS, 0.1f, 4f); - } - // advance to next nonempty slot. - for(int i = 0; i < INPUT_SLOTS_SIZE; ++i) { - if(!stacks_.get(drop_slot_index_).isEmpty()) break; - drop_slot_index_ = next_slot(drop_slot_index_); - } + boolean dropped = false; + for(int i = 0; i < drop_stacks.length; ++i) { + if(drop_stacks[i].isEmpty()) continue; + dirty = true; + drop(world, pos, state.getValue(FACING), drop_stacks[i], drop_speed_, drop_xdev_, drop_ydev_, drop_noise_); + dropped = true; + } + // cooldown + if(dropped) drop_timer_ = DROP_PERIOD_OFFSET + drop_period_ * 2; // 0.1s time base -> 100%===10s + // drop sound + if(dropped && ((drop_logic_ & DROPLOGIC_SILENT_DROP) == 0)) { + world.playSound(null, pos, SoundEvents.BLOCK_CLOTH_STEP, SoundCategory.BLOCKS, 0.1f, 4f); + } + // advance to next nonempty slot. + for(int i = 0; i < INPUT_SLOTS_SIZE; ++i) { + if(!stacks_.get(drop_slot_index_).isEmpty()) break; + drop_slot_index_ = next_slot(drop_slot_index_); } } if(dirty) markDirty(); diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorHorizontalSupport.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorHorizontalSupport.java index b86a57f..4c4de69 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorHorizontalSupport.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorHorizontalSupport.java @@ -45,7 +45,6 @@ public class BlockDecorHorizontalSupport extends BlockDecor public BlockDecorHorizontalSupport(@Nonnull String registryName, long config, @Nullable Material material, float hardness, float resistance, @Nullable SoundType sound, @Nonnull AxisAlignedBB unrotatedAABB) { super(registryName, config|CFG_HORIZIONTAL, material, hardness, resistance, sound); - final boolean is_horizontal = ((config & CFG_HORIZIONTAL)!=0); AABBs = new ArrayList(Arrays.asList( // Effective bounding box ModAuxiliaries.getRotatedAABB(unrotatedAABB.grow(2.0/16, 0, 0), EnumFacing.NORTH, true), diff --git a/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang b/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang index ac3dde1..84b0bb9 100644 --- a/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang +++ b/1.12/src/main/resources/assets/engineersdecor/lang/en_us.lang @@ -122,7 +122,12 @@ tile.engineersdecor.passive_fluid_accumulator.help=§6Vacuum suction based fluid 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 +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 \ + solts 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. diff --git a/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang b/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang index 31253b9..a0096e7 100644 --- a/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang +++ b/1.12/src/main/resources/assets/engineersdecor/lang/ru_ru.lang @@ -115,7 +115,12 @@ tile.engineersdecor.passive_fluid_accumulator.name=Passive fluid accumulator 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 +#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 \ + solts 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 logo) #tile.engineersdecor.sign_decor.help=§6This should not be craftable or visible in JEI. Used for creative tab and screenshots. diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/device/factory_dropper_bottom.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/device/factory_dropper_bottom.png index 25a96ba52c5f4862b0188bd905a8b29bee5daa0a..4b59be387ba8e44a4b94375ef620f06a0ddf807c 100644 GIT binary patch delta 491 zcmV9>q=7iYbMFkz%gc)%4hK?7s4BHq?(XiG=NVN6U|m;Kwa4Q) zVvM1bf(JOC&rH)qjFD0bBEmS1hzJ0~F!Tbd%H?ulnkG~g3xDwT_Qw1BJ1HfWWnozs za?aFRJ5~EGrS$zGvJpH!KJxJJz&y_#E$57Lu1m1i;=M;zIUbK34hQCW##?Ivu-2lg zyuQ8yV2s%it?g30bNu-EoqO&9w*N84p3vTH?PKR0rB-|hoyZu2O)34C(5eH7$c=$@ z$eVWWvDRWsDSzFdmZ+*XB>NWTydomZ^Sl)>#&n#fbx$KA?0stc8<|zrJ}8Z3zZ$`w zq#dxX>(<6*l5_6HkM`_i?>*Gbn^Fosgn;+H7im81llG@uYp}XWiZR~KL5z`K&(DMq z7;+}BE5ZBCo6k?`IPyFFp_ng(5Xd=i5>BTR(=;&*17!Z`X>-?F;y<%Q1Y-;-CBDix zuGcHmG_foTHiXb;yJ>9tYOUm)dy&@rw%<927ZHxfBd61ekB^V8wUj~#0TE$cSB7Ee hH#5e_`FzGX$6smmSQag%wlDwy002ovPDHLkV1k?H_B{Xq delta 470 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 pvnRpOjRAfCzxlsWg!;fQEz1` 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%0A&>dSGP#+aQmFF= z-#fXDsZlqoy6=o2aHygQr|ClDq*KVdL0NmFI};%1IObU#7qsycDwp#uELB&RiJ8^X$5)bj zb{w!AxvKmHqv_$al;PoQi7Mv0DkJZfl3tF1nmaLt9JurjrxYviQxP0B4eR@Q2cN9X znlm@XdwJt$D_H$l^%~oM2HEZ&+&Sy;V*s(w*SyYY(Rr3y>WPInGiL>5~oaR{=X3w?C*)-hdrUzNN4qgIJv5mmrIX#SL4 ze&5LD-t^mbB77&}Wt|pXsc;H^hdQMO^~LBqWRl zY^F#$gM}`{dFpH)gYomC0zrVwlWBcI9(a##wF~@AF5aW*AWR@1Ny)8gmP1WSp&=pT zAAAaBZ>+M5|N7I1OrUDhZ&2bpMOrp3hBPN5zUnh0#$m5>giSG|&n|K@=-rQM6aBLGCRGLs zVdG;E=*u=b6N}^OafkFA9WlLO3A8b>BwuxPi8ghd)%v{!clI61S;yCGvjN+np(l1O z=GM-=^J9wfii(Lt_qkpma^RLsKMPq>T(v|c#Sw6Xl+Ybx7z%MO$MigH!vHu%_zUO2 z>DGla4r3wOTbY_s3-2G>xx3h`sq`F?W8-;Z_0+2UBAnBIxnltfhz?dSJqq2x7Og^T z7UwT;Q{5uNTnku~6Oqi=+R;g`lahRB$MA~%KHPIp$3=uay6-Mv`xy|RX;QlSx`r-B~JLjFdG{yMEBqUJ$UWk_1##0b8IZv*9x-6rBLRy9C9wA?u9MBKIa zWtETnPw((}=NH{d;_EJjqah$`>)aHNpZO2o-{bb`^>fF*%HOvR3&73ASfy#gUxOk$ z30-u0C_*Q3j&V}H$~squv|_Wyy4B242D_Tx?M^!;i98ELGZqK!!Y{htDTou9wWzs7;PEO zIqfe6_-C(|j&;&dMo2vt;jAhlo>>3(lxZt);&RCQ;Z3O6=_oH=y&4MuIkSI*dMn^O zOh+d}NX`s3piL)m z5#M`2oW+mgF*>VKh05^OK}>hQ4h;!}^J{(?EP4#oIUrBRfqy{j>U@)P1< z74y`<^od=7DHnMuB2Kk9;)bjZ!J&`sv3&8jeQe3 zCZmRzr}2Hfg>I<-swTbj1bwr`v1Hy#&ayZ~mNIbvp)b^t58JFMxYFo_Img9*VC2j8 zt%f56Fkc&EbV3dX3REzuofy#H{%n@guz@X-WBJUIjVjRb|}m9V^3aINBB$eW$;|+Bosx z{YjN;T3Uv2qqC~5Hxe)ShpofE4M?%q9z-TYT2Ojy;#DZ=x!ly#m3&%vr_HNT-eTBa z*i*U_ACwFav#IP9*5D&0SR&{j$xQ$h4R9JVOr-2*K(89F$(2=DB+(Q1oEV)hzY$r5}UG}z-zgOUw(p}EF3 z+Rx5MYPdw|)|VNckZY_jGvfL6sAq@PU_=W+Z@!lt+GI8G>+H4R&UJNPt2&M}wqk*7 zVXfyzilD;rgJhe=WSMW}boP3PXLuTaUCr%N4!O23s|PUi3QhjAq`!6v6lJEh7S$g= 1.13.2-25.0.214. + [A] Added sign "Electrical hazzard"/"Caution hot wire". + [A] Added sign "Caution dangerous there" (skull/bones). + [A] Added horizontal steel double-T support beam with pole connections. + - v1.0.4-b3 [V] Version assignment: All features of v1.0.4-b3-1.12.2 that can be ported to 1.13.2 implemented/prepared, therefore version re-iterated. [A] Lab furnace ported to 1.13. diff --git a/Makefile b/Makefile index 4c420a9..3c85508 100644 --- a/Makefile +++ b/Makefile @@ -23,7 +23,7 @@ init-1.12: ; -@cd 1.12; make -s init init-1.13: ; -@cd 1.13; make -s init dist-1.12: ; @cd 1.12; make -s dist dist-1.13: ; @cd 1.13; make -s dist -dist: dist-1.12 dist-1.13 | update-json +dist: ; @echo "First change to specific version directory." update-json: @echo "[main] Update update.json ..." diff --git a/meta/update.json b/meta/update.json index dad7cae..7d69b62 100644 --- a/meta/update.json +++ b/meta/update.json @@ -1,6 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.12.2": { + "1.0.7-b1": "[A] Factory dropper (config:experimental) button placement fixed, GUI vs external view x/y markers added, internal trigger logic simplified. Thx @overchoice for beta testing!", "1.0.6": "[R] Release based on v1.0.6-b1. Release-to-release changes: * Fixed FML remapping issue (COULD CAUSE CRASHES). * Small waste incinerator added. * Lang files updated/corrections. * Metal ladder easier to break.\n[A] Added factory dropper (config:experimental).\n[C] Thx to abdurraslan for the detailed issue #25.", "1.0.6-b1": "[A] Added small waste incinerator (delayed fifo-buffered item disposal).\n[M] Fixed item/block name capitalization (by Voxelo).\n[M] Metal ladders are easier to break/harvest.\n[F] Fixed FML remapping issue by using dedicated IItemHandler instances.", "1.0.5": "[R] Release based on v1.0.5-b1. Release-to-release changes: * Small electrical passthrough-furnace added. * Passive fluid accumulator added. * Config options added. * Sign plates added. * Minor bug fixes.\n[A] Added sign \"Electrical hazzard\"/\"Caution hot wire\".\n[A] Added sign \"Caution dangerous there\" (skull/bones).", @@ -37,6 +38,7 @@ "1.0.0-b1": "[A] Initial structure.\n[A] Added clinker bricks and clinker brick stairs.\n[A] Added slag bricks and slag brick stairs.\n[A] Added metal rung ladder.\n[A] Added staggered metal steps ladder.\n[A] Added treated wood ladder.\n[A] Added treated wood pole.\n[A] Added treated wood table." }, "1.13.2": { + "1.0.4-b4": "[U] Updated forge dependency: REQUIRES FORGE >= 1.13.2-25.0.214.\n[A] Added sign \"Electrical hazzard\"/\"Caution hot wire\".\n[A] Added sign \"Caution dangerous there\" (skull/bones).\n[A] Added horizontal steel double-T support beam with pole connections.", "1.0.4-b3": "[V] Version assignment: All features of v1.0.4-b3-1.12.2 that can be ported to 1.13.2 implemented/prepared, therefore version re-iterated.\n[A] Lab furnace ported to 1.13.\n[A] Treated wood crafting table: Added crafting table history/quick craft.\n[A] Treated wood stool: Sitting on the stool implemented.\n[A] Steel poles (thick/thin) with support heads/foots added.\n[E] Prepared position dependent texture variation for walls (clinker, slag, rebar concrete), missing one forge feature yet for completion.\n[E] Prepared multi-layer rendering for windows, needs forge feature implementation.", "1.0.2-b3": "[A] Added treated wood window.\n[A] Added treated wood pole support.\n[A] Added treated wood pole head.\n[A] Added steel framed window.", "1.0.2-b2": "[A] Added wall decomposition recipes.\n[A] Added slag brick wall.\n[M] Climbing/descending mod ladders is faster when looking up or down and not sneaking.\n[M] Panzer glass material definition changed.", @@ -47,8 +49,8 @@ }, "promos": { "1.12.2-recommended": "1.0.6", - "1.12.2-latest": "1.0.6", + "1.12.2-latest": "1.0.7-b1", "1.13.2-recommended": "", - "1.13.2-latest": "1.0.4-b3" + "1.13.2-latest": "1.0.4-b4" } } \ No newline at end of file