From dc96f2121adcd07fedf67aafdc40d8095b8c4285 Mon Sep 17 00:00:00 2001 From: Restioson Date: Mon, 8 May 2017 19:27:14 +0200 Subject: [PATCH] Fix Speaker not playing sounds on break and replace for entire Lua session --- .../peripheral/common/BlockPeripheral.java | 1 + .../peripheral/speaker/SpeakerPeripheral.java | 8 +++----- .../shared/peripheral/speaker/TileSpeaker.java | 16 +++++++++------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheral.java index 7d83ce3f5..915bdb049 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/common/BlockPeripheral.java @@ -334,6 +334,7 @@ public class BlockPeripheral extends BlockPeripheralBase break; } case Speaker: { + state = state.withProperty( Properties.FACING, dir ); break; } case Monitor: diff --git a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java index e8e48214e..bf096a422 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java @@ -16,7 +16,7 @@ import net.minecraft.util.SoundEvent; public class SpeakerPeripheral implements IPeripheral { - private final TileSpeaker m_speaker; + private TileSpeaker m_speaker; private long m_clock; private long m_lastPlayTime; @@ -27,12 +27,11 @@ public class SpeakerPeripheral implements IPeripheral { m_lastPlayTime = 0; } - protected void updateClock() + void updateClock() { m_clock++; } - /* IPeripheral implementations */ @Override @@ -80,7 +79,6 @@ public class SpeakerPeripheral implements IPeripheral { @Override public Object[] callMethod(IComputerAccess computerAccess, ILuaContext context, int methodIndex, Object[] args) throws LuaException { - switch (methodIndex) { // playsound @@ -96,7 +94,7 @@ public class SpeakerPeripheral implements IPeripheral { default: { - return null; + throw new LuaException("Method index out of range!"); } } diff --git a/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java index 275a117b7..b74ac4a47 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java @@ -6,6 +6,7 @@ package dan200.computercraft.shared.peripheral.speaker; +import dan200.computercraft.api.peripheral.IComputerAccess; import dan200.computercraft.api.peripheral.IPeripheral; import dan200.computercraft.shared.peripheral.common.TilePeripheralBase; import net.minecraft.util.EnumFacing; @@ -18,20 +19,21 @@ public class TileSpeaker extends TilePeripheralBase // Members private SpeakerPeripheral m_peripheral; - @Override - public synchronized void update() + public TileSpeaker() { - if (m_peripheral != null) - { - m_peripheral.updateClock(); - } + super(); + m_peripheral = new SpeakerPeripheral(this); + } + @Override + public synchronized void update() { + m_peripheral.updateClock(); } // IPeripheralTile implementation + public IPeripheral getPeripheral(EnumFacing side) { - m_peripheral = new SpeakerPeripheral(this); return m_peripheral; }