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 25a96ba..4b59be3 100644 Binary files a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/device/factory_dropper_bottom.png and b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/device/factory_dropper_bottom.png differ diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/gui/factory_dropper_gui.png b/1.12/src/main/resources/assets/engineersdecor/textures/gui/factory_dropper_gui.png index 7486813..2b85507 100644 Binary files a/1.12/src/main/resources/assets/engineersdecor/textures/gui/factory_dropper_gui.png and b/1.12/src/main/resources/assets/engineersdecor/textures/gui/factory_dropper_gui.png differ diff --git a/1.13/.gitignore b/1.13/.gitignore index b745772..af7450c 100644 --- a/1.13/.gitignore +++ b/1.13/.gitignore @@ -34,3 +34,4 @@ desktop.ini Thumbs.db forge*changelog.txt /*.txt +mcmodsrepo \ No newline at end of file diff --git a/1.13/readme.md b/1.13/readme.md index 3ec0707..80b5370 100644 --- a/1.13/readme.md +++ b/1.13/readme.md @@ -10,6 +10,11 @@ Mod sources for Minecraft version 1.13.2. ---- ## Revision history + - v1.0.4-b4 [U] Updated forge dependency: REQUIRES FORGE >= 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