1.14: Slab slice left-click pickup optional. Added config option for device drops in creative mode (issue #67). Fixed Panzer Glass Block submerged display (issue #68).

This commit is contained in:
stfwi 2019-11-22 16:21:20 +01:00
parent 1c71841ed8
commit 8dac14c5ba
11 changed files with 263 additions and 174 deletions

View file

@ -5,4 +5,4 @@ version_minecraft=1.14.4
version_forge_minecraft=1.14.4-28.1.90 version_forge_minecraft=1.14.4-28.1.90
version_fml_mappings=20190719-1.14.3 version_fml_mappings=20190719-1.14.3
version_jei=1.14.4:6.0.0.10 version_jei=1.14.4:6.0.0.10
version_engineersdecor=1.0.16-b5 version_engineersdecor=1.0.16-b6

View file

@ -1,6 +1,7 @@
{ {
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
"1.14.4": { "1.14.4": {
"1.0.16-b6": "[A] Made slab slice left-click pickup optional (default enabled).\n[A] Added config option for device drops in creative mode (addresses #67),\n[F] Fixed Panzer Glass Block submerged display (issue #68, thx WenXin20).",
"1.0.16-b5": "[F] Fixed recipe condition bug (issue #65, thx Nachtflame for the report, and gigaherz & killjoy for the help).", "1.0.16-b5": "[F] Fixed recipe condition bug (issue #65, thx Nachtflame for the report, and gigaherz & killjoy for the help).",
"1.0.16-b4": "[U] Updated to Forge 1.14.4-28.1.90/20190719-1.14.3.\n[M] Increased slag brick recipe yield to 8.\n[M] Parent specs in model files adapted.", "1.0.16-b4": "[U] Updated to Forge 1.14.4-28.1.90/20190719-1.14.3.\n[M] Increased slag brick recipe yield to 8.\n[M] Parent specs in model files adapted.",
"1.0.16-b3": "[A] Config options (opt-outs and tweaks) added.\n[M] Increased clinker brick recipe yield to 8 for the builders needs.", "1.0.16-b3": "[A] Config options (opt-outs and tweaks) added.\n[M] Increased clinker brick recipe yield to 8 for the builders needs.",
@ -35,6 +36,6 @@
}, },
"promos": { "promos": {
"1.14.4-recommended": "", "1.14.4-recommended": "",
"1.14.4-latest": "1.0.16-b5" "1.14.4-latest": "1.0.16-b6"
} }
} }

View file

@ -11,6 +11,10 @@ Mod sources for Minecraft version 1.14.4.
## Version history ## Version history
- v1.0.16-b6 [A] Made slab slice left-click pickup optional (default enabled).
[A] Added config option for device drops in creative mode (addresses #67),
[F] Fixed Panzer Glass Block submerged display (issue #68, thx WenXin20).
- v1.0.16-b5 [F] Fixed recipe condition bug (issue #65, thx Nachtflame for the report, - v1.0.16-b5 [F] Fixed recipe condition bug (issue #65, thx Nachtflame for the report,
and gigaherz & killjoy for the help). and gigaherz & killjoy for the help).

View file

@ -186,8 +186,8 @@ public class ModContent
// ------------------------------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------------------------------
public static final BlockDecorGlassBlock PANZERGLASS_BLOCK = (BlockDecorGlassBlock)(new BlockDecorGlassBlock( public static final BlockDecorGlassBlock PANZERGLASS_BLOCK = (BlockDecorGlassBlock)(new BlockDecorGlassBlock(
BlockDecor.CFG_DEFAULT, BlockDecor.CFG_TRANSLUCENT,
Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(5f, 2000f).sound(SoundType.METAL) Block.Properties.create(Material.GLASS, MaterialColor.AIR).hardnessAndResistance(5f, 2000f).sound(SoundType.METAL)
)).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "panzerglass_block")); )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "panzerglass_block"));
public static final BlockDecorSlab PANZERGLASS_SLAB = (BlockDecorSlab)(new BlockDecorSlab( public static final BlockDecorSlab PANZERGLASS_SLAB = (BlockDecorSlab)(new BlockDecorSlab(

View file

@ -41,6 +41,8 @@ import net.minecraft.util.*;
import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.ITextComponent;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import wile.engineersdecor.detail.ModConfig;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -127,11 +129,13 @@ public class BlockDecor extends Block implements IDecorBlock
} }
} }
public static boolean dropBlock(BlockState state, World world, BlockPos pos, boolean explosion) public static boolean dropBlock(BlockState state, World world, BlockPos pos, @Nullable PlayerEntity player)
{ {
if(!(state.getBlock() instanceof IDecorBlock)) { world.removeBlock(pos, false); return true; } if(!(state.getBlock() instanceof IDecorBlock)) { world.removeBlock(pos, false); return true; }
if(!world.isRemote()) { if(!world.isRemote()) {
((IDecorBlock)state.getBlock()).dropList(state, world, pos, explosion).forEach(stack->world.addEntity(new ItemEntity(world, pos.getX()+0.5, pos.getY()+0.5, pos.getZ()+0.5, stack))); if((ModConfig.with_creative_mode_device_drops) || (player==null) || (!player.isCreative())) {
((IDecorBlock)state.getBlock()).dropList(state, world, pos, player==null).forEach(stack->world.addEntity(new ItemEntity(world, pos.getX()+0.5, pos.getY()+0.5, pos.getZ()+0.5, stack)));
}
} }
if(state.getBlock().hasTileEntity(state)) world.removeTileEntity(pos); if(state.getBlock().hasTileEntity(state)) world.removeTileEntity(pos);
world.removeBlock(pos, false); world.removeBlock(pos, false);
@ -140,11 +144,11 @@ public class BlockDecor extends Block implements IDecorBlock
@Override @Override
public boolean removedByPlayer(BlockState state, World world, BlockPos pos, PlayerEntity player, boolean willHarvest, IFluidState fluid) public boolean removedByPlayer(BlockState state, World world, BlockPos pos, PlayerEntity player, boolean willHarvest, IFluidState fluid)
{ return hasDynamicDropList() ? dropBlock(state, world, pos, false) : super.removedByPlayer(state, world,pos , player, willHarvest, fluid); } { return hasDynamicDropList() ? dropBlock(state, world, pos, player) : super.removedByPlayer(state, world,pos , player, willHarvest, fluid); }
@Override @Override
public void onExplosionDestroy(World world, BlockPos pos, Explosion explosion) public void onExplosionDestroy(World world, BlockPos pos, Explosion explosion)
{ if(hasDynamicDropList()) dropBlock(world.getBlockState(pos), world, pos, true); } { if(hasDynamicDropList()) dropBlock(world.getBlockState(pos), world, pos, null); }
@Override @Override
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")

View file

@ -10,60 +10,39 @@
package wile.engineersdecor.blocks; package wile.engineersdecor.blocks;
import wile.engineersdecor.detail.ModAuxiliaries; import wile.engineersdecor.detail.ModAuxiliaries;
import net.minecraft.block.Block;
import net.minecraft.block.material.PushReaction;
import net.minecraft.block.BlockState;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.entity.EntityType;
import net.minecraft.item.ItemStack;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.Direction;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.world.IBlockReader; import net.minecraft.world.IBlockReader;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.StainedGlassBlock;
import net.minecraft.item.DyeColor;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Direction;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.List; import java.util.List;
public class BlockDecorGlassBlock extends BlockDecor public class BlockDecorGlassBlock extends StainedGlassBlock
{ {
public BlockDecorGlassBlock(long config, Block.Properties properties) public BlockDecorGlassBlock(long config, Block.Properties properties)
{ super(config, properties); } { super(DyeColor.BLACK, properties); }
@Override @Override
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public void addInformation(ItemStack stack, @Nullable IBlockReader world, List<ITextComponent> tooltip, ITooltipFlag flag) public void addInformation(ItemStack stack, @Nullable IBlockReader world, List<ITextComponent> tooltip, ITooltipFlag flag)
{ ModAuxiliaries.Tooltip.addInformation(stack, world, tooltip, flag, true); } { ModAuxiliaries.Tooltip.addInformation(stack, world, tooltip, flag, true); }
@Override
@OnlyIn(Dist.CLIENT)
public BlockRenderLayer getRenderLayer()
{ return BlockRenderLayer.TRANSLUCENT; }
@Override @Override
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public boolean isSideInvisible(BlockState state, BlockState adjacentBlockState, Direction side) public boolean isSideInvisible(BlockState state, BlockState adjacentBlockState, Direction side)
{ return (adjacentBlockState.getBlock()==this) ? true : super.isSideInvisible(state, adjacentBlockState, side); } { return (adjacentBlockState.getBlock()==this) ? true : super.isSideInvisible(state, adjacentBlockState, side); }
@Override
public boolean propagatesSkylightDown(BlockState state, IBlockReader reader, BlockPos pos)
{ return true; }
@Override @Override
public boolean canSpawnInBlock() public boolean canSpawnInBlock()
{ return false; } { return false; }
@Override
@SuppressWarnings("deprecation")
public boolean canEntitySpawn(BlockState state, IBlockReader world, BlockPos pos, EntityType<?> entityType)
{ return false; }
@Override
@SuppressWarnings("deprecation")
public PushReaction getPushReaction(BlockState state)
{ return PushReaction.NORMAL; }
} }

View file

@ -32,6 +32,8 @@ import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import wile.engineersdecor.detail.ModConfig;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@ -74,9 +76,7 @@ public class BlockDecorHalfSlab extends BlockDecor implements IWaterLoggable
public void addInformation(ItemStack stack, @Nullable IBlockReader world, List<ITextComponent> tooltip, ITooltipFlag flag) public void addInformation(ItemStack stack, @Nullable IBlockReader world, List<ITextComponent> tooltip, ITooltipFlag flag)
{ {
if(!ModAuxiliaries.Tooltip.addInformation(stack, world, tooltip, flag, true)) return; if(!ModAuxiliaries.Tooltip.addInformation(stack, world, tooltip, flag, true)) return;
// if(!ModConfig.optout.without_direct_slab_pickup) { if(!ModConfig.without_direct_slab_pickup) ModAuxiliaries.Tooltip.addInformation("engineersdecor.tooltip.slabpickup", "engineersdecor.tooltip.slabpickup", tooltip, flag, true);
ModAuxiliaries.Tooltip.addInformation("engineersdecor.tooltip.slabpickup", "engineersdecor.tooltip.slabpickup", tooltip, flag, true);
// }
} }
@Override @Override
@ -162,7 +162,7 @@ public class BlockDecorHalfSlab extends BlockDecor implements IWaterLoggable
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public void onBlockClicked(BlockState state, World world, BlockPos pos, PlayerEntity player) public void onBlockClicked(BlockState state, World world, BlockPos pos, PlayerEntity player)
{ {
if((world.isRemote) ) return; // || (ModConfig.optout.without_direct_slab_pickup) if((world.isRemote) || (ModConfig.without_direct_slab_pickup)) return;
final ItemStack stack = player.getHeldItemMainhand(); final ItemStack stack = player.getHeldItemMainhand();
if(stack.isEmpty() || (Block.getBlockFromItem(stack.getItem()) != this)) return; if(stack.isEmpty() || (Block.getBlockFromItem(stack.getItem()) != this)) return;
if(stack.getCount() >= stack.getMaxStackSize()) return; if(stack.getCount() >= stack.getMaxStackSize()) return;

View file

@ -8,11 +8,13 @@
*/ */
package wile.engineersdecor.blocks; package wile.engineersdecor.blocks;
import net.minecraft.entity.ai.goal.Goal;
import wile.engineersdecor.ModContent; import wile.engineersdecor.ModContent;
import wile.engineersdecor.ModEngineersDecor; import wile.engineersdecor.ModEngineersDecor;
import wile.engineersdecor.detail.ExtItems; import wile.engineersdecor.detail.ExtItems;
import wile.engineersdecor.detail.ItemHandling; import wile.engineersdecor.detail.ItemHandling;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.IWorldReader;
import net.minecraft.world.IBlockReader; import net.minecraft.world.IBlockReader;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
@ -329,19 +331,25 @@ public class BlockDecorMilker extends BlockDecorDirectedHorizontal
private void release_cow(CowEntity cow) private void release_cow(CowEntity cow)
{ {
log("RELEASE");
if(cow != null) { if(cow != null) {
cow.setNoAI(false); cow.setNoAI(false);
cow.goalSelector.getRunningGoals().forEach(PrioritizedGoal::resetTask); cow.targetSelector.getRunningGoals().filter(g->(g.getGoal()) instanceof MoveToMilkingMachineGoal).forEach(cow.goalSelector::removeGoal);
cow.goalSelector.getRunningGoals().filter(g->(g.getGoal()) instanceof MoveToMilkingMachineGoal).forEach(cow.goalSelector::removeGoal);
} }
tracked_cow_ = null; tracked_cow_ = null;
state_ = MilkingState.IDLE; state_ = MilkingState.IDLE;
tick_timer_ = TICK_INTERVAL; tick_timer_ = TICK_INTERVAL;
} }
private boolean is_coming(CowEntity cow)
{ return (cow != null) && (cow.goalSelector.getRunningGoals().anyMatch(g->(g.getGoal()) instanceof MoveToMilkingMachineGoal)); }
private boolean milking_process() private boolean milking_process()
{ {
if((tracked_cow_ == null) && (fluid_level() >= MAX_MILKING_TANK_LEVEL)) return false; // nothing to do if((tracked_cow_ == null) && (fluid_level() >= MAX_MILKING_TANK_LEVEL)) return false; // nothing to do
final Direction facing = world.getBlockState(getPos()).get(HORIZONTAL_FACING).getOpposite(); final Direction facing = world.getBlockState(getPos()).get(HORIZONTAL_FACING).getOpposite();
final BlockPos target_pos = getPos().offset(facing);
CowEntity cow = null; CowEntity cow = null;
{ {
AxisAlignedBB aabb = new AxisAlignedBB(pos.offset(facing, 3)).grow(4, 2, 4); AxisAlignedBB aabb = new AxisAlignedBB(pos.offset(facing, 3)).grow(4, 2, 4);
@ -354,17 +362,32 @@ public class BlockDecorMilker extends BlockDecorDirectedHorizontal
cow = cows.get(world.rand.nextInt(cows.size()-1)); // pick one cow = cows.get(world.rand.nextInt(cows.size()-1)); // pick one
} }
} }
if((state_ != MilkingState.IDLE) && ((state_timeout_ -= PROCESSING_TICK_INTERVAL) <= 0)) { log("Cow motion timeout"); cow = null; } if((state_ != MilkingState.IDLE) && ((state_timeout_ -= PROCESSING_TICK_INTERVAL) <= 0)) { release_cow(cow); log("Cow motion timeout"); cow = null; }
if((cow == null) || (!cow.isAlive())) { release_cow(cow); cow = null; } if((cow == null) || (!cow.isAlive())) { release_cow(cow); cow = null; }
if(tracked_cow_ == null) state_ = MilkingState.IDLE; if(tracked_cow_ == null) state_ = MilkingState.IDLE;
if(cow == null) { log("Init: No cow"); return false; } // retry next cycle if(cow == null) { log("Init: No cow"); return false; } // retry next cycle
tick_timer_ = PROCESSING_TICK_INTERVAL; //tick_timer_ = PROCESSING_TICK_INTERVAL;
state_timer_ -= PROCESSING_TICK_INTERVAL;
if(cow.getNavigator().noPath()) { if(is_coming(cow)) {
BlockPos p = getPos().offset(facing,2); log("coming ... ");
cow.getNavigator().tryMoveToXYZ(p.getX()+0.5, p.getY()+0.5, p.getZ()+0.5, 1); } else {
if(!target_pos.withinDistance(cow.getPosition(), 0.5)) {
log("come ... ");
cow.getNavigator().clearPath();
cow.goalSelector.getRunningGoals().forEach(PrioritizedGoal::resetTask);
Goal goal = new MoveToMilkingMachineGoal(cow, target_pos);
cow.goalSelector.addGoal(2, goal);
cow.targetSelector.addGoal(2, goal);
} else {
log("in pos ... ");
cow.moveToBlockPosAndAngles(target_pos, facing.getHorizontalAngle(), 0);
} }
}
{
if(cow!=null) return false;
state_timer_ -= PROCESSING_TICK_INTERVAL;
if(state_timer_ > 0) return false; if(state_timer_ > 0) return false;
switch(state_) { // Let's do this the old school FSA sequencing way ... switch(state_) { // Let's do this the old school FSA sequencing way ...
case IDLE: { case IDLE: {
@ -487,6 +510,8 @@ public class BlockDecorMilker extends BlockDecorDirectedHorizontal
tracked_cow_ = null; tracked_cow_ = null;
} }
} }
}
return (tracked_cow_ != null); return (tracked_cow_ != null);
} }
@ -534,4 +559,65 @@ public class BlockDecorMilker extends BlockDecorDirectedHorizontal
} }
} }
public static class MoveToMilkingMachineGoal extends net.minecraft.entity.ai.goal.MoveToBlockGoal
{
public MoveToMilkingMachineGoal(CowEntity creature, BlockPos pos)
{
super(creature, 1.0, 20, 4);
destinationBlock = pos;
runDelay = 0;
timeoutCounter = 0;
}
private void abort()
{
creature.targetSelector.getRunningGoals().filter(g->(g.getGoal()) instanceof MoveToMilkingMachineGoal).forEach(creature.goalSelector::removeGoal);
creature.goalSelector.getRunningGoals().filter(g->(g.getGoal()) instanceof MoveToMilkingMachineGoal).forEach(creature.goalSelector::removeGoal);
}
@Override
public double getTargetDistanceSq()
{ return 0.8; }
@Override
public boolean shouldMove()
{ return (timeoutCounter & 0x3) == 0; }
@Override
public boolean shouldExecute() {
if(--runDelay > 0) return false;
runDelay = 4;
return true;
}
@Override
public void tick()
{
if(!destinationBlock.withinDistance(creature.getPositionVec(), getTargetDistanceSq())) {
++timeoutCounter;
if(shouldMove()) {
if(!creature.getNavigator().tryMoveToXYZ(destinationBlock.getX()+0.5, destinationBlock.getY(), destinationBlock.getZ()+0.5, this.movementSpeed)) {
System.out.println("TRYMOVE FAILED");
abort();
}
}
} else {
System.out.println("IN POSITION");
abort();
}
}
@Override
protected boolean shouldMoveTo(IWorldReader world, BlockPos pos)
{
for(int i=0; i<4; ++i) {
if(world.getBlockState(pos.offset(Direction.byHorizontalIndex(i))).getBlock() instanceof BlockDecorMilker) return true;
}
System.out.println("NO MOVE TO");
abort();
return false;
}
}
} }

View file

@ -28,13 +28,15 @@ import net.minecraft.world.IBlockReader;
import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import wile.engineersdecor.detail.ModConfig;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
public class BlockDecorSlab extends BlockDecor public class BlockDecorSlab extends BlockDecor implements IWaterLoggable
{ {
public static final IntegerProperty PARTS = IntegerProperty.create("parts", 0, 2); public static final IntegerProperty PARTS = IntegerProperty.create("parts", 0, 2);
public static final IntegerProperty TEXTURE_VARIANT = IntegerProperty.create("tvariant", 0, 3); public static final IntegerProperty TEXTURE_VARIANT = IntegerProperty.create("tvariant", 0, 3);
@ -63,11 +65,15 @@ public class BlockDecorSlab extends BlockDecor
public void addInformation(ItemStack stack, @Nullable IBlockReader world, List<ITextComponent> tooltip, ITooltipFlag flag) public void addInformation(ItemStack stack, @Nullable IBlockReader world, List<ITextComponent> tooltip, ITooltipFlag flag)
{ {
if(!ModAuxiliaries.Tooltip.addInformation(stack, world, tooltip, flag, true)) return; if(!ModAuxiliaries.Tooltip.addInformation(stack, world, tooltip, flag, true)) return;
// if(!ModConfig.optout.without_direct_slab_pickup) { if(!ModConfig.without_direct_slab_pickup) ModAuxiliaries.Tooltip.addInformation("engineersdecor.tooltip.slabpickup", "engineersdecor.tooltip.slabpickup", tooltip, flag, true);
ModAuxiliaries.Tooltip.addInformation("engineersdecor.tooltip.slabpickup", "engineersdecor.tooltip.slabpickup", tooltip, flag, true);
// }
} }
@Override
@OnlyIn(Dist.CLIENT)
@SuppressWarnings("deprecation")
public boolean isSideInvisible(BlockState state, BlockState adjacentBlockState, Direction side)
{ return (adjacentBlockState==state) ? true : super.isSideInvisible(state, adjacentBlockState, side); }
@Override @Override
public boolean canSpawnInBlock() public boolean canSpawnInBlock()
{ return false; } { return false; }
@ -144,7 +150,7 @@ public class BlockDecorSlab extends BlockDecor
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public void onBlockClicked(BlockState state, World world, BlockPos pos, PlayerEntity player) public void onBlockClicked(BlockState state, World world, BlockPos pos, PlayerEntity player)
{ {
if((world.isRemote)) return; // || (ModConfig.optout.without_direct_slab_pickup) if((world.isRemote) || (ModConfig.without_direct_slab_pickup)) return;
final ItemStack stack = player.getHeldItemMainhand(); final ItemStack stack = player.getHeldItemMainhand();
if(stack.isEmpty() || (Block.getBlockFromItem(stack.getItem()) != this)) return; if(stack.isEmpty() || (Block.getBlockFromItem(stack.getItem()) != this)) return;
if(stack.getCount() >= stack.getMaxStackSize()) return; if(stack.getCount() >= stack.getMaxStackSize()) return;

View file

@ -127,7 +127,7 @@ public class ModConfig
public final ForgeConfigSpec.BooleanValue without_ladder_speed_boost; public final ForgeConfigSpec.BooleanValue without_ladder_speed_boost;
public final ForgeConfigSpec.BooleanValue without_crafting_table_history; public final ForgeConfigSpec.BooleanValue without_crafting_table_history;
public final ForgeConfigSpec.BooleanValue without_direct_slab_pickup; public final ForgeConfigSpec.BooleanValue without_direct_slab_pickup;
public final ForgeConfigSpec.BooleanValue with_creative_mode_device_drops;
// Misc // Misc
public final ForgeConfigSpec.BooleanValue with_experimental; public final ForgeConfigSpec.BooleanValue with_experimental;
public final ForgeConfigSpec.BooleanValue without_recipes; public final ForgeConfigSpec.BooleanValue without_recipes;
@ -309,11 +309,6 @@ public class ModConfig
.translation(ModEngineersDecor.MODID + ".config.without_halfslabs") .translation(ModEngineersDecor.MODID + ".config.without_halfslabs")
.comment("Disable stackable 1/8 block slices.") .comment("Disable stackable 1/8 block slices.")
.define("without_halfslabs", false); .define("without_halfslabs", false);
without_direct_slab_pickup = builder
.translation(ModEngineersDecor.MODID + ".config.without_direct_slab_pickup")
.comment("Disable directly picking up layers from slabs and slab " +
" slices by left clicking while looking up/down.")
.define("without_direct_slab_pickup", false);
without_poles = builder without_poles = builder
.translation(ModEngineersDecor.MODID + ".config.without_poles") .translation(ModEngineersDecor.MODID + ".config.without_poles")
.comment("Disable poles of any material.") .comment("Disable poles of any material.")
@ -336,6 +331,16 @@ public class ModConfig
.translation(ModEngineersDecor.MODID + ".config.with_experimental") .translation(ModEngineersDecor.MODID + ".config.with_experimental")
.comment("Enables experimental features. Use at own risk.") .comment("Enables experimental features. Use at own risk.")
.define("with_experimental", false); .define("with_experimental", false);
without_direct_slab_pickup = builder
.translation(ModEngineersDecor.MODID + ".config.without_direct_slab_pickup")
.comment("Disable directly picking up layers from slabs and slab " +
" slices by left clicking while looking up/down.")
.define("without_direct_slab_pickup", false);
with_creative_mode_device_drops = builder
.translation(ModEngineersDecor.MODID + ".config.with_creative_mode_device_drops")
.comment("Enable that devices are dropped as item also in creative mode, allowing " +
" to relocate them with contents and settings.")
.define("with_creative_mode_device_drops", false);
builder.pop(); builder.pop();
} }
// --- TWEAKS ------------------------------------------------------------- // --- TWEAKS -------------------------------------------------------------
@ -574,6 +579,8 @@ public class ModConfig
private static final CompoundNBT server_config_ = new CompoundNBT(); private static final CompoundNBT server_config_ = new CompoundNBT();
public static boolean without_crafting_table = false; public static boolean without_crafting_table = false;
public static boolean immersiveengineering_installed = false; public static boolean immersiveengineering_installed = false;
public static boolean without_direct_slab_pickup = false;
public static boolean with_creative_mode_device_drops = false;
private static boolean with_experimental_features_ = false; private static boolean with_experimental_features_ = false;
private static boolean without_recipes_ = false; private static boolean without_recipes_ = false;
@ -596,6 +603,7 @@ public class ModConfig
immersiveengineering_installed = ModAuxiliaries.isModLoaded("immersiveengineering"); immersiveengineering_installed = ModAuxiliaries.isModLoaded("immersiveengineering");
with_experimental_features_ = COMMON.with_experimental.get(); with_experimental_features_ = COMMON.with_experimental.get();
without_recipes_ = COMMON.without_recipes.get(); without_recipes_ = COMMON.without_recipes.get();
without_direct_slab_pickup = COMMON.without_direct_slab_pickup.get();
if(with_experimental_features_) { if(with_experimental_features_) {
ModEngineersDecor.logger().info("Config: EXPERIMENTAL FEATURES ENABLED."); ModEngineersDecor.logger().info("Config: EXPERIMENTAL FEATURES ENABLED.");
} }

View file

@ -4,7 +4,7 @@
"1.12.2-recommended": "1.0.15", "1.12.2-recommended": "1.0.15",
"1.12.2-latest": "1.0.16-b3", "1.12.2-latest": "1.0.16-b3",
"1.14.4-recommended": "", "1.14.4-recommended": "",
"1.14.4-latest": "1.0.16-b5" "1.14.4-latest": "1.0.16-b6"
}, },
"1.12.2": { "1.12.2": {
"1.0.16-b3": "[M] Increased slag brick recipe yield to 8.\n[A] Small Block Placer can plant Cocoa.\n[F] Fixed Small Block Placer seed detection issue (issue #64, thx Federsavo).\n[F] Fixed incorrectly enabled alternative recipes for fluid accumulator and check valve when IE is installed.\n[M] Slightly nerfed the Small Solar Panel default peak power output (does not affect existing configurations).", "1.0.16-b3": "[M] Increased slag brick recipe yield to 8.\n[A] Small Block Placer can plant Cocoa.\n[F] Fixed Small Block Placer seed detection issue (issue #64, thx Federsavo).\n[F] Fixed incorrectly enabled alternative recipes for fluid accumulator and check valve when IE is installed.\n[M] Slightly nerfed the Small Solar Panel default peak power output (does not affect existing configurations).",
@ -74,6 +74,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.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.14.4": { "1.14.4": {
"1.0.16-b6": "[A] Made slab slice left-click pickup optional (default enabled).\n[A] Added config option for device drops in creative mode (addresses #67),\n[F] Fixed Panzer Glass Block submerged display (issue #68, thx WenXin20).",
"1.0.16-b5": "[F] Fixed recipe condition bug (issue #65, thx Nachtflame for the report, and gigaherz & killjoy for the help).", "1.0.16-b5": "[F] Fixed recipe condition bug (issue #65, thx Nachtflame for the report, and gigaherz & killjoy for the help).",
"1.0.16-b4": "[U] Updated to Forge 1.14.4-28.1.90/20190719-1.14.3.\n[M] Increased slag brick recipe yield to 8.\n[M] Parent specs in model files adapted.", "1.0.16-b4": "[U] Updated to Forge 1.14.4-28.1.90/20190719-1.14.3.\n[M] Increased slag brick recipe yield to 8.\n[M] Parent specs in model files adapted.",
"1.0.16-b3": "[A] Config options (opt-outs and tweaks) added.\n[M] Increased clinker brick recipe yield to 8 for the builders needs.", "1.0.16-b3": "[A] Config options (opt-outs and tweaks) added.\n[M] Increased clinker brick recipe yield to 8 for the builders needs.",