From e6e2b582c15d064502a727da0dbca150a02e2900 Mon Sep 17 00:00:00 2001 From: AlgorithmX2 Date: Tue, 27 Feb 2018 21:24:49 -0600 Subject: [PATCH] Add option to prevent specified states from reverting to blocks (implements #374) --- .../TileEntityBlockChiseled.java | 7 +++-- .../mod/chiselsandbits/config/ModConfig.java | 26 +++++++++++++++++-- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/main/java/mod/chiselsandbits/chiseledblock/TileEntityBlockChiseled.java b/src/main/java/mod/chiselsandbits/chiseledblock/TileEntityBlockChiseled.java index 1f1e6453..4b0e9e6a 100644 --- a/src/main/java/mod/chiselsandbits/chiseledblock/TileEntityBlockChiseled.java +++ b/src/main/java/mod/chiselsandbits/chiseledblock/TileEntityBlockChiseled.java @@ -677,9 +677,12 @@ public void setBlob( .withProperty( BlockChiseled.UProperty_VoxelBlob, new VoxelBlobStateReference( common.mostCommonState, getPositionRandom( pos ) ) ) ); final IBlockState newState = ModUtil.getStateById( common.mostCommonState ); - if ( !MinecraftForge.EVENT_BUS.post( new EventFullBlockRestoration( worldObj, pos, newState ) ) ) + if ( ChiselsAndBits.getConfig().canRevertToBlock( newState ) ) { - worldObj.setBlockState( pos, newState, triggerUpdates ? 3 : 0 ); + if ( !MinecraftForge.EVENT_BUS.post( new EventFullBlockRestoration( worldObj, pos, newState ) ) ) + { + worldObj.setBlockState( pos, newState, triggerUpdates ? 3 : 0 ); + } } } else if ( common.mostCommonState != 0 ) diff --git a/src/main/java/mod/chiselsandbits/config/ModConfig.java b/src/main/java/mod/chiselsandbits/config/ModConfig.java index 729fc523..b7be2d7e 100644 --- a/src/main/java/mod/chiselsandbits/config/ModConfig.java +++ b/src/main/java/mod/chiselsandbits/config/ModConfig.java @@ -9,13 +9,16 @@ import java.util.Map.Entry; import java.util.Set; +import mod.chiselsandbits.chiseledblock.serialization.StringStates; import mod.chiselsandbits.core.ChiselsAndBits; import mod.chiselsandbits.helpers.LocalStrings; +import mod.chiselsandbits.helpers.ModUtil; import mod.chiselsandbits.modes.ChiselMode; import mod.chiselsandbits.modes.PositivePatternMode; import mod.chiselsandbits.modes.TapeMeasureModes; import mod.chiselsandbits.registry.ModRegistry; import mod.chiselsandbits.render.chiseledblock.tesr.GfxRenderState.UseVBO; +import net.minecraft.block.state.IBlockState; import net.minecraft.launchwrapper.Launch; import net.minecraftforge.common.config.ConfigCategory; import net.minecraftforge.common.config.Configuration; @@ -296,10 +299,10 @@ public class ModConfig extends Configuration @Configured( category = "Balance Settings" ) public boolean fullBlockCrafting; - + @Configured( category = "Balance Settings" ) public boolean requireBagSpace; - + @Configured( category = "Balance Settings" ) public boolean voidExcessBits; @@ -326,6 +329,20 @@ public boolean isEnabled( return out; } + public boolean canRevertToBlock( + IBlockState newState ) + { + final Property p = get( "Revertible States", StringStates.getNameFromStateID( ModUtil.getStateId( newState ) ), true ); + final boolean out = p.getBoolean( true ); + + if ( hasChanged() ) + { + save(); + } + + return out; + } + private void setDefaults() { final long mem = Runtime.getRuntime().maxMemory() / ( 1024 * 1024 ); // mb @@ -551,6 +568,11 @@ else if ( Enum.class.isAssignableFrom( f.getType() ) ) continue; } + if ( s.equals( "revertible states" ) ) + { + continue; + } + final ConfigCategory cc = getCategory( s ); final List removeThis = new ArrayList();