Skip to content

Commit

Permalink
Add config options to disable various turtle actions
Browse files Browse the repository at this point in the history
Mostly intended for those people who don't like .inspect() or
.getItemDetail(), but could allow modpacks to block equipping upgrades,
placing blocks, etc...
  • Loading branch information
SquidDev committed Feb 16, 2018
1 parent ecff23d commit 0a8a8a7
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 4 deletions.
26 changes: 22 additions & 4 deletions src/main/java/dan200/computercraft/ComputerCraft.java
Expand Up @@ -7,6 +7,7 @@
package dan200.computercraft; package dan200.computercraft;


import com.google.common.base.CaseFormat; import com.google.common.base.CaseFormat;
import com.google.common.base.Converter;
import dan200.computercraft.api.filesystem.IMount; import dan200.computercraft.api.filesystem.IMount;
import dan200.computercraft.api.filesystem.IWritableMount; import dan200.computercraft.api.filesystem.IWritableMount;
import dan200.computercraft.api.media.IMedia; import dan200.computercraft.api.media.IMedia;
Expand All @@ -18,6 +19,7 @@
import dan200.computercraft.api.pocket.IPocketUpgrade; import dan200.computercraft.api.pocket.IPocketUpgrade;
import dan200.computercraft.api.redstone.IBundledRedstoneProvider; import dan200.computercraft.api.redstone.IBundledRedstoneProvider;
import dan200.computercraft.api.turtle.ITurtleUpgrade; import dan200.computercraft.api.turtle.ITurtleUpgrade;
import dan200.computercraft.api.turtle.event.TurtleAction;
import dan200.computercraft.core.apis.AddressPredicate; import dan200.computercraft.core.apis.AddressPredicate;
import dan200.computercraft.core.filesystem.ComboMount; import dan200.computercraft.core.filesystem.ComboMount;
import dan200.computercraft.core.filesystem.FileMount; import dan200.computercraft.core.filesystem.FileMount;
Expand Down Expand Up @@ -81,10 +83,7 @@
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.net.URL; import java.net.URL;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipFile; import java.util.zip.ZipFile;


Expand Down Expand Up @@ -133,6 +132,7 @@ public class ComputerCraft
public static int advancedTurtleFuelLimit = 100000; public static int advancedTurtleFuelLimit = 100000;
public static boolean turtlesObeyBlockProtection = true; public static boolean turtlesObeyBlockProtection = true;
public static boolean turtlesCanPush = true; public static boolean turtlesCanPush = true;
public static EnumSet<TurtleAction> turtleDisabledActions = EnumSet.noneOf( TurtleAction.class );


public static final int terminalWidth_computer = 51; public static final int terminalWidth_computer = 51;
public static final int terminalHeight_computer = 19; public static final int terminalHeight_computer = 19;
Expand Down Expand Up @@ -212,6 +212,7 @@ public static class Config {
public static Property advancedTurtleFuelLimit; public static Property advancedTurtleFuelLimit;
public static Property turtlesObeyBlockProtection; public static Property turtlesObeyBlockProtection;
public static Property turtlesCanPush; public static Property turtlesCanPush;
public static Property turtleDisabledActions;


public static Property modem_range; public static Property modem_range;
public static Property modem_highAltitudeRange; public static Property modem_highAltitudeRange;
Expand Down Expand Up @@ -341,6 +342,9 @@ public void preInit( FMLPreInitializationEvent event )
Config.turtlesCanPush = Config.config.get( Configuration.CATEGORY_GENERAL, "turtlesCanPush", turtlesCanPush ); Config.turtlesCanPush = Config.config.get( Configuration.CATEGORY_GENERAL, "turtlesCanPush", turtlesCanPush );
Config.turtlesCanPush.setComment( "If set to true, Turtles will push entities out of the way instead of stopping if there is space to do so" ); Config.turtlesCanPush.setComment( "If set to true, Turtles will push entities out of the way instead of stopping if there is space to do so" );


Config.turtleDisabledActions = Config.config.get( Configuration.CATEGORY_GENERAL, "turtle_disabled_actions", new String[ 0 ] );
Config.turtleDisabledActions.setComment( "A list of turtle actions which are disabled." );

Config.maxNotesPerTick = Config.config.get( Configuration.CATEGORY_GENERAL, "maxNotesPerTick", maxNotesPerTick ); Config.maxNotesPerTick = Config.config.get( Configuration.CATEGORY_GENERAL, "maxNotesPerTick", maxNotesPerTick );
Config.maxNotesPerTick.setComment( "Maximum amount of notes a speaker can play at once" ); Config.maxNotesPerTick.setComment( "Maximum amount of notes a speaker can play at once" );


Expand Down Expand Up @@ -385,6 +389,20 @@ public static void syncConfig() {
turtlesObeyBlockProtection = Config.turtlesObeyBlockProtection.getBoolean(); turtlesObeyBlockProtection = Config.turtlesObeyBlockProtection.getBoolean();
turtlesCanPush = Config.turtlesCanPush.getBoolean(); turtlesCanPush = Config.turtlesCanPush.getBoolean();


turtleDisabledActions.clear();
Converter<String, String> converter = CaseFormat.LOWER_CAMEL.converterTo( CaseFormat.UPPER_UNDERSCORE );
for( String value : Config.turtleDisabledActions.getStringList() )
{
try
{
turtleDisabledActions.add( TurtleAction.valueOf( converter.convert( value ) ) );
}
catch( IllegalArgumentException e )
{
ComputerCraft.log.error( "Unknown turtle action " + value );
}
}

maxNotesPerTick = Math.max(1, Config.maxNotesPerTick.getInt()); maxNotesPerTick = Math.max(1, Config.maxNotesPerTick.getInt());


Config.config.save(); Config.config.save();
Expand Down
Expand Up @@ -8,6 +8,7 @@


import dan200.computercraft.ComputerCraft; import dan200.computercraft.ComputerCraft;
import dan200.computercraft.api.turtle.ITurtleUpgrade; import dan200.computercraft.api.turtle.ITurtleUpgrade;
import dan200.computercraft.api.turtle.event.TurtleActionEvent;
import dan200.computercraft.shared.computer.core.ComputerFamily; import dan200.computercraft.shared.computer.core.ComputerFamily;
import dan200.computercraft.shared.turtle.blocks.BlockTurtle; import dan200.computercraft.shared.turtle.blocks.BlockTurtle;
import dan200.computercraft.shared.turtle.blocks.TileTurtle; import dan200.computercraft.shared.turtle.blocks.TileTurtle;
Expand Down Expand Up @@ -465,6 +466,14 @@ public void onEntityLivingDrops( LivingDropsEvent event )
{ {
dispatchEntityDrops( event.getEntity(), event.getDrops() ); dispatchEntityDrops( event.getEntity(), event.getDrops() );
} }

@SubscribeEvent
public void onTurtleAction( TurtleActionEvent event) {
if( ComputerCraft.turtleDisabledActions.contains( event.getAction() ) )
{
event.setCanceled( true, "Action has been disabled" );
}
}
} }


private void dispatchEntityDrops( Entity entity, java.util.List<EntityItem> drops ) private void dispatchEntityDrops( Entity entity, java.util.List<EntityItem> drops )
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/assets/computercraft/lang/en_us.lang
Expand Up @@ -60,5 +60,6 @@ gui.computercraft:config.turtle_fuel_limit=Turtle fuel limit
gui.computercraft:config.advanced_turtle_fuel_limit=Advanced Turtle fuel limit gui.computercraft:config.advanced_turtle_fuel_limit=Advanced Turtle fuel limit
gui.computercraft:config.turtles_obey_block_protection=Turtles obey block protection gui.computercraft:config.turtles_obey_block_protection=Turtles obey block protection
gui.computercraft:config.turtles_can_push=Turtles can push entities gui.computercraft:config.turtles_can_push=Turtles can push entities
gui.computercraft:config.turtle_disabled_actions=Disabled turtle actions
gui.computercraft:config.maximum_files_open=Maximum files open per computer gui.computercraft:config.maximum_files_open=Maximum files open per computer
gui.computercraft:config.max_notes_per_tick=Maximum notes that a computer can play at once gui.computercraft:config.max_notes_per_tick=Maximum notes that a computer can play at once

0 comments on commit 0a8a8a7

Please sign in to comment.