Added PocketSpeaker & corrected blockmodel for turtle speaker
@ -40,6 +40,7 @@ import dan200.computercraft.shared.peripheral.modem.WirelessNetwork;
|
|||||||
import dan200.computercraft.shared.peripheral.printer.TilePrinter;
|
import dan200.computercraft.shared.peripheral.printer.TilePrinter;
|
||||||
import dan200.computercraft.shared.pocket.items.ItemPocketComputer;
|
import dan200.computercraft.shared.pocket.items.ItemPocketComputer;
|
||||||
import dan200.computercraft.shared.pocket.peripherals.PocketModem;
|
import dan200.computercraft.shared.pocket.peripherals.PocketModem;
|
||||||
|
import dan200.computercraft.shared.pocket.peripherals.PocketSpeaker;
|
||||||
import dan200.computercraft.shared.proxy.ICCTurtleProxy;
|
import dan200.computercraft.shared.proxy.ICCTurtleProxy;
|
||||||
import dan200.computercraft.shared.proxy.IComputerCraftProxy;
|
import dan200.computercraft.shared.proxy.IComputerCraftProxy;
|
||||||
import dan200.computercraft.shared.turtle.blocks.BlockTurtle;
|
import dan200.computercraft.shared.turtle.blocks.BlockTurtle;
|
||||||
@ -132,6 +133,8 @@ public class ComputerCraft
|
|||||||
public static int floppySpaceLimit = 125 * 1000;
|
public static int floppySpaceLimit = 125 * 1000;
|
||||||
public static int maximumFilesOpen = 128;
|
public static int maximumFilesOpen = 128;
|
||||||
|
|
||||||
|
public static int maxNotesPerTick = 8;
|
||||||
|
|
||||||
// Blocks and Items
|
// Blocks and Items
|
||||||
public static class Blocks
|
public static class Blocks
|
||||||
{
|
{
|
||||||
@ -171,6 +174,7 @@ public class ComputerCraft
|
|||||||
{
|
{
|
||||||
public static PocketModem wirelessModem;
|
public static PocketModem wirelessModem;
|
||||||
public static PocketModem advancedModem;
|
public static PocketModem advancedModem;
|
||||||
|
public static PocketSpeaker pocketSpeaker;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Config {
|
public static class Config {
|
||||||
@ -196,6 +200,8 @@ public class ComputerCraft
|
|||||||
public static Property computerSpaceLimit;
|
public static Property computerSpaceLimit;
|
||||||
public static Property floppySpaceLimit;
|
public static Property floppySpaceLimit;
|
||||||
public static Property maximumFilesOpen;
|
public static Property maximumFilesOpen;
|
||||||
|
public static Property maxNotesPerTick;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Registries
|
// Registries
|
||||||
@ -287,6 +293,9 @@ public class ComputerCraft
|
|||||||
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.maxNotesPerTick = Config.config.get( Configuration.CATEGORY_GENERAL, "maxNotesPerTick", maxNotesPerTick );
|
||||||
|
Config.maxNotesPerTick.setComment( "Maximum amount of sounds a speaker can play at once" );
|
||||||
|
|
||||||
for (Property property : Config.config.getCategory( Configuration.CATEGORY_GENERAL ).getOrderedValues())
|
for (Property property : Config.config.getCategory( Configuration.CATEGORY_GENERAL ).getOrderedValues())
|
||||||
{
|
{
|
||||||
property.setLanguageKey( "gui.computercraft:config." + CaseFormat.LOWER_CAMEL.to( CaseFormat.LOWER_UNDERSCORE, property.getName() ) );
|
property.setLanguageKey( "gui.computercraft:config." + CaseFormat.LOWER_CAMEL.to( CaseFormat.LOWER_UNDERSCORE, property.getName() ) );
|
||||||
@ -326,6 +335,8 @@ public class ComputerCraft
|
|||||||
turtlesObeyBlockProtection = Config.turtlesObeyBlockProtection.getBoolean();
|
turtlesObeyBlockProtection = Config.turtlesObeyBlockProtection.getBoolean();
|
||||||
turtlesCanPush = Config.turtlesCanPush.getBoolean();
|
turtlesCanPush = Config.turtlesCanPush.getBoolean();
|
||||||
|
|
||||||
|
maximumFilesOpen = Math.max(1, Config.maximumFilesOpen.getInt());
|
||||||
|
|
||||||
Config.config.save();
|
Config.config.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -704,7 +715,7 @@ public class ComputerCraft
|
|||||||
public static Iterable<IPocketUpgrade> getVanillaPocketUpgrades() {
|
public static Iterable<IPocketUpgrade> getVanillaPocketUpgrades() {
|
||||||
List<IPocketUpgrade> upgrades = new ArrayList<IPocketUpgrade>();
|
List<IPocketUpgrade> upgrades = new ArrayList<IPocketUpgrade>();
|
||||||
for(IPocketUpgrade upgrade : pocketUpgrades.values()) {
|
for(IPocketUpgrade upgrade : pocketUpgrades.values()) {
|
||||||
if(upgrade instanceof PocketModem) {
|
if(upgrade instanceof PocketModem || upgrade instanceof PocketSpeaker) {
|
||||||
upgrades.add( upgrade );
|
upgrades.add( upgrade );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -155,6 +155,8 @@ public class CCTurtleProxyClient extends CCTurtleProxyCommon
|
|||||||
loadModel( event, "advanced_turtle_modem_on_left" );
|
loadModel( event, "advanced_turtle_modem_on_left" );
|
||||||
loadModel( event, "advanced_turtle_modem_off_right" );
|
loadModel( event, "advanced_turtle_modem_off_right" );
|
||||||
loadModel( event, "advanced_turtle_modem_on_right" );
|
loadModel( event, "advanced_turtle_modem_on_right" );
|
||||||
|
loadModel( event, "turtle_speaker_upgrade_left" );
|
||||||
|
loadModel( event, "turtle_speaker_upgrade_right" );
|
||||||
loadSmartModel( event, "turtle_dynamic", m_turtleSmartItemModel );
|
loadSmartModel( event, "turtle_dynamic", m_turtleSmartItemModel );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
package dan200.computercraft.shared.peripheral.speaker;
|
package dan200.computercraft.shared.peripheral.speaker;
|
||||||
|
|
||||||
|
import dan200.computercraft.ComputerCraft;
|
||||||
import dan200.computercraft.api.lua.ILuaContext;
|
import dan200.computercraft.api.lua.ILuaContext;
|
||||||
import dan200.computercraft.api.lua.LuaException;
|
import dan200.computercraft.api.lua.LuaException;
|
||||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||||
@ -21,11 +22,13 @@ public class SpeakerPeripheral implements IPeripheral {
|
|||||||
private TileSpeaker m_speaker;
|
private TileSpeaker m_speaker;
|
||||||
private long m_clock;
|
private long m_clock;
|
||||||
private long m_lastPlayTime;
|
private long m_lastPlayTime;
|
||||||
|
private int m_notesThisTick;
|
||||||
|
|
||||||
public SpeakerPeripheral()
|
public SpeakerPeripheral()
|
||||||
{
|
{
|
||||||
m_clock = 0;
|
m_clock = 0;
|
||||||
m_lastPlayTime = 0;
|
m_lastPlayTime = 0;
|
||||||
|
m_notesThisTick = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SpeakerPeripheral(TileSpeaker speaker)
|
public SpeakerPeripheral(TileSpeaker speaker)
|
||||||
@ -34,9 +37,9 @@ public class SpeakerPeripheral implements IPeripheral {
|
|||||||
m_speaker = speaker;
|
m_speaker = speaker;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateClock()
|
public void update() {
|
||||||
{
|
|
||||||
m_clock++;
|
m_clock++;
|
||||||
|
m_notesThisTick = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public World getWorld()
|
public World getWorld()
|
||||||
@ -100,7 +103,7 @@ public class SpeakerPeripheral implements IPeripheral {
|
|||||||
{
|
{
|
||||||
// playsound
|
// playsound
|
||||||
case 0: {
|
case 0: {
|
||||||
return playSound(args);
|
return playSound(args, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// playnote
|
// playnote
|
||||||
@ -162,11 +165,15 @@ public class SpeakerPeripheral implements IPeripheral {
|
|||||||
throw new LuaException("Expected string, number (optional), number (optional)");
|
throw new LuaException("Expected string, number (optional), number (optional)");
|
||||||
}
|
}
|
||||||
|
|
||||||
return playSound(new Object[] {"block.note." + arguments[0], volume, Math.pow(2d, (pitch - 12) / 12d)});
|
// If the resource location for noteblock notes changes, this method call will need to be updated
|
||||||
|
Object[] returnValue = playSound(new Object[] {"block.note." + arguments[0], volume, Math.pow(2d, (pitch - 12) / 12d)}, true);
|
||||||
|
m_notesThisTick++;
|
||||||
|
|
||||||
|
return returnValue;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object[] playSound(Object[] arguments) throws LuaException
|
private Object[] playSound(Object[] arguments, boolean isNote) throws LuaException
|
||||||
{
|
{
|
||||||
|
|
||||||
float volume = 1f;
|
float volume = 1f;
|
||||||
@ -209,7 +216,7 @@ public class SpeakerPeripheral implements IPeripheral {
|
|||||||
|
|
||||||
ResourceLocation resourceName = new ResourceLocation((String) arguments[0]);
|
ResourceLocation resourceName = new ResourceLocation((String) arguments[0]);
|
||||||
|
|
||||||
if (m_clock - m_lastPlayTime > TileSpeaker.MIN_TICKS_BETWEEN_SOUNDS)
|
if (m_clock - m_lastPlayTime > TileSpeaker.MIN_TICKS_BETWEEN_SOUNDS || ((m_clock - m_lastPlayTime == 0) && (m_notesThisTick < ComputerCraft.maxNotesPerTick) && isNote))
|
||||||
{
|
{
|
||||||
|
|
||||||
if (SoundEvent.REGISTRY.containsKey(resourceName))
|
if (SoundEvent.REGISTRY.containsKey(resourceName))
|
||||||
|
@ -26,7 +26,7 @@ public class TileSpeaker extends TilePeripheralBase
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized void update() {
|
public synchronized void update() {
|
||||||
m_peripheral.updateClock();
|
m_peripheral.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
// IPeripheralTile implementation
|
// IPeripheralTile implementation
|
||||||
|
@ -0,0 +1,87 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of ComputerCraft - http://www.computercraft.info
|
||||||
|
* Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission.
|
||||||
|
* Send enquiries to dratcliffe@gmail.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dan200.computercraft.shared.pocket.peripherals;
|
||||||
|
|
||||||
|
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||||
|
import dan200.computercraft.api.pocket.IPocketAccess;
|
||||||
|
import dan200.computercraft.api.pocket.IPocketUpgrade;
|
||||||
|
import dan200.computercraft.shared.peripheral.PeripheralType;
|
||||||
|
import dan200.computercraft.shared.peripheral.common.PeripheralItemFactory;
|
||||||
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
public class PocketSpeaker implements IPocketUpgrade
|
||||||
|
{
|
||||||
|
public PocketSpeaker()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public ResourceLocation getUpgradeID()
|
||||||
|
{
|
||||||
|
return new ResourceLocation( "computercraft", "speaker" );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public String getUnlocalisedAdjective()
|
||||||
|
{
|
||||||
|
return "upgrade.computercraft:speaker.adjective";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public ItemStack getCraftingItem()
|
||||||
|
{
|
||||||
|
return PeripheralItemFactory.create(PeripheralType.Speaker, null, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public IPeripheral createPeripheral( @Nonnull IPocketAccess access )
|
||||||
|
{
|
||||||
|
return new PocketSpeakerPeripheral();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update( @Nonnull IPocketAccess access, @Nullable IPeripheral peripheral )
|
||||||
|
{
|
||||||
|
if ( peripheral instanceof PocketSpeakerPeripheral )
|
||||||
|
{
|
||||||
|
Entity entity = access.getEntity();
|
||||||
|
|
||||||
|
PocketSpeakerPeripheral speaker = (PocketSpeakerPeripheral) peripheral;
|
||||||
|
|
||||||
|
if ( entity instanceof EntityLivingBase)
|
||||||
|
{
|
||||||
|
EntityLivingBase player = (EntityLivingBase) entity;
|
||||||
|
speaker.setLocation( entity.getEntityWorld(), player.posX, player.posY + player.getEyeHeight(), player.posZ );
|
||||||
|
}
|
||||||
|
|
||||||
|
else if ( entity != null )
|
||||||
|
{
|
||||||
|
speaker.setLocation( entity.getEntityWorld(), entity.posX, entity.posY, entity.posZ );
|
||||||
|
}
|
||||||
|
speaker.update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onRightClick(@Nonnull World world, @Nonnull IPocketAccess access, @Nullable IPeripheral peripheral )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,58 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of ComputerCraft - http://www.computercraft.info
|
||||||
|
* Copyright Daniel Ratcliffe, 2011-2016. Do not distribute without permission.
|
||||||
|
* Send enquiries to dratcliffe@gmail.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dan200.computercraft.shared.pocket.peripherals;
|
||||||
|
|
||||||
|
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||||
|
import dan200.computercraft.shared.peripheral.speaker.SpeakerPeripheral;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
public class PocketSpeakerPeripheral extends SpeakerPeripheral
|
||||||
|
{
|
||||||
|
private World m_world;
|
||||||
|
private BlockPos m_position;
|
||||||
|
|
||||||
|
public PocketSpeakerPeripheral()
|
||||||
|
{
|
||||||
|
super();
|
||||||
|
m_world = null;
|
||||||
|
m_position = new BlockPos( 0.0, 0.0, 0.0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLocation( World world, double x, double y, double z )
|
||||||
|
{
|
||||||
|
m_position = new BlockPos( x, y, z );
|
||||||
|
|
||||||
|
if( m_world != world )
|
||||||
|
{
|
||||||
|
m_world = world;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public World getWorld()
|
||||||
|
{
|
||||||
|
return m_world;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockPos getPos()
|
||||||
|
{
|
||||||
|
if( m_world != null )
|
||||||
|
{
|
||||||
|
return m_position;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals( IPeripheral other )
|
||||||
|
{
|
||||||
|
// Sufficient because of use case: checking peripherals on individual pocket computers -- there will not be +1
|
||||||
|
return other instanceof PocketSpeakerPeripheral;
|
||||||
|
}
|
||||||
|
}
|
@ -49,6 +49,7 @@ import dan200.computercraft.shared.pocket.inventory.ContainerPocketComputer;
|
|||||||
import dan200.computercraft.shared.pocket.items.ItemPocketComputer;
|
import dan200.computercraft.shared.pocket.items.ItemPocketComputer;
|
||||||
import dan200.computercraft.shared.pocket.items.PocketComputerItemFactory;
|
import dan200.computercraft.shared.pocket.items.PocketComputerItemFactory;
|
||||||
import dan200.computercraft.shared.pocket.peripherals.PocketModem;
|
import dan200.computercraft.shared.pocket.peripherals.PocketModem;
|
||||||
|
import dan200.computercraft.shared.pocket.peripherals.PocketSpeaker;
|
||||||
import dan200.computercraft.shared.pocket.recipes.PocketComputerUpgradeRecipe;
|
import dan200.computercraft.shared.pocket.recipes.PocketComputerUpgradeRecipe;
|
||||||
import dan200.computercraft.shared.turtle.blocks.TileTurtle;
|
import dan200.computercraft.shared.turtle.blocks.TileTurtle;
|
||||||
import dan200.computercraft.shared.turtle.inventory.ContainerTurtle;
|
import dan200.computercraft.shared.turtle.inventory.ContainerTurtle;
|
||||||
@ -453,6 +454,9 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy
|
|||||||
ComputerCraft.PocketUpgrades.advancedModem = new PocketModem( true );
|
ComputerCraft.PocketUpgrades.advancedModem = new PocketModem( true );
|
||||||
ComputerCraftAPI.registerPocketUpgrade( ComputerCraft.PocketUpgrades.advancedModem );
|
ComputerCraftAPI.registerPocketUpgrade( ComputerCraft.PocketUpgrades.advancedModem );
|
||||||
|
|
||||||
|
ComputerCraft.PocketUpgrades.pocketSpeaker = new PocketSpeaker();
|
||||||
|
ComputerCraftAPI.registerPocketUpgrade( ComputerCraft.PocketUpgrades.pocketSpeaker );
|
||||||
|
|
||||||
// Wireless Pocket Computer
|
// Wireless Pocket Computer
|
||||||
GameRegistry.addRecipe( new PocketComputerUpgradeRecipe() );
|
GameRegistry.addRecipe( new PocketComputerUpgradeRecipe() );
|
||||||
|
|
||||||
|
@ -24,7 +24,6 @@ import net.minecraft.world.World;
|
|||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.vecmath.Matrix4f;
|
import javax.vecmath.Matrix4f;
|
||||||
|
|
||||||
@ -41,6 +40,12 @@ public class TurtleSpeaker implements ITurtleUpgrade
|
|||||||
m_turtle = turtle;
|
m_turtle = turtle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update()
|
||||||
|
{
|
||||||
|
super.update();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public World getWorld()
|
public World getWorld()
|
||||||
{
|
{
|
||||||
@ -67,9 +72,8 @@ public class TurtleSpeaker implements ITurtleUpgrade
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Members
|
// Members
|
||||||
ResourceLocation m_id;
|
private ResourceLocation m_id;
|
||||||
int m_legacyID;
|
private int m_legacyID;
|
||||||
Peripheral m_peripheral;
|
|
||||||
|
|
||||||
@SideOnly( Side.CLIENT )
|
@SideOnly( Side.CLIENT )
|
||||||
private ModelResourceLocation m_leftModel;
|
private ModelResourceLocation m_leftModel;
|
||||||
@ -77,7 +81,7 @@ public class TurtleSpeaker implements ITurtleUpgrade
|
|||||||
@SideOnly( Side.CLIENT )
|
@SideOnly( Side.CLIENT )
|
||||||
private ModelResourceLocation m_rightModel;
|
private ModelResourceLocation m_rightModel;
|
||||||
|
|
||||||
public TurtleSpeaker(ResourceLocation id, int legacyId )
|
public TurtleSpeaker(ResourceLocation id, int legacyId)
|
||||||
{
|
{
|
||||||
m_id = id;
|
m_id = id;
|
||||||
m_legacyID = legacyId;
|
m_legacyID = legacyId;
|
||||||
@ -119,15 +123,14 @@ public class TurtleSpeaker implements ITurtleUpgrade
|
|||||||
@Override
|
@Override
|
||||||
public IPeripheral createPeripheral( @Nonnull ITurtleAccess turtle, @Nonnull TurtleSide side )
|
public IPeripheral createPeripheral( @Nonnull ITurtleAccess turtle, @Nonnull TurtleSide side )
|
||||||
{
|
{
|
||||||
m_peripheral = new TurtleSpeaker.Peripheral( turtle );
|
return new TurtleSpeaker.Peripheral(turtle);
|
||||||
return m_peripheral; // TODO does this go in constructor?
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public TurtleCommandResult useTool(@Nonnull ITurtleAccess turtleAccess, @Nonnull TurtleSide turtleSide, @Nonnull TurtleVerb verb, @Nonnull EnumFacing direction)
|
public TurtleCommandResult useTool(@Nonnull ITurtleAccess turtleAccess, @Nonnull TurtleSide turtleSide, @Nonnull TurtleVerb verb, @Nonnull EnumFacing direction)
|
||||||
{
|
{
|
||||||
return null;
|
return TurtleCommandResult.failure();
|
||||||
}
|
}
|
||||||
|
|
||||||
@SideOnly( Side.CLIENT )
|
@SideOnly( Side.CLIENT )
|
||||||
@ -161,8 +164,12 @@ public class TurtleSpeaker implements ITurtleUpgrade
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(@Nonnull ITurtleAccess turtleAccess, @Nonnull TurtleSide turtleSide)
|
public void update(@Nonnull ITurtleAccess turtle, @Nonnull TurtleSide turtleSide)
|
||||||
{
|
{
|
||||||
m_peripheral.updateClock();
|
if (turtle.getPeripheral(turtleSide) instanceof Peripheral)
|
||||||
|
{
|
||||||
|
Peripheral peripheral = (Peripheral) turtle.getPeripheral(turtleSide);
|
||||||
|
peripheral.update();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"parent": "block/orientable",
|
"parent": "block/orientable",
|
||||||
"textures": {
|
"textures": {
|
||||||
"front": "computercraft:blocks/speakerFront",
|
"front": "computercraft:blocks/speaker_front",
|
||||||
"side": "computercraft:blocks/speakerSide",
|
"side": "computercraft:blocks/speaker_side",
|
||||||
"top": "computercraft:blocks/speakerTop"
|
"top": "computercraft:blocks/speaker_top"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"parent": "computercraft:block/turtle_upgrade_base_left",
|
"parent": "computercraft:block/turtle_upgrade_base_left",
|
||||||
"textures": {
|
"textures": {
|
||||||
"texture": "computercraft:blocks/speakerFront"
|
"texture": "computercraft:blocks/turtle_speaker_face"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"parent": "computercraft:block/turtle_upgrade_base_right",
|
"parent": "computercraft:block/turtle_upgrade_base_right",
|
||||||
"textures": {
|
"textures": {
|
||||||
"texture": "computercraft:blocks/speakerFront"
|
"texture": "computercraft:blocks/turtle_speaker_face"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 493 B After Width: | Height: | Size: 493 B |
Before Width: | Height: | Size: 327 B After Width: | Height: | Size: 327 B |
Before Width: | Height: | Size: 290 B After Width: | Height: | Size: 290 B |
After Width: | Height: | Size: 452 B |