44 lines
1.3 KiB
Java
44 lines
1.3 KiB
Java
/*
|
|
* Copyright (C) 2025 Minecon724
|
|
* Tweaks724 is licensed under the GNU General Public License. See the LICENSE.md file
|
|
* in the project root for the full license text.
|
|
*/
|
|
|
|
package eu.m724.tweaks.module.redstone;
|
|
|
|
import org.bukkit.scheduler.BukkitRunnable;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.function.Consumer;
|
|
|
|
public class RedstoneStateUpdateRunnable extends BukkitRunnable {
|
|
private Map<Integer, Byte> updateQueue = new HashMap<>();
|
|
private Map<Integer, Consumer<Byte>> retrieveQueue = new HashMap<>();
|
|
|
|
private final RedstoneGateways redstoneGateways;
|
|
|
|
RedstoneStateUpdateRunnable(RedstoneGateways redstoneGateways) {
|
|
this.redstoneGateways = redstoneGateways;
|
|
}
|
|
|
|
void enqueueUpdate(int gatewayId, byte power) {
|
|
updateQueue.put(gatewayId, power);
|
|
}
|
|
|
|
void enqueueRetrieve(int repeaterId, Consumer<Byte> consumer) {
|
|
retrieveQueue.put(repeaterId, consumer);
|
|
}
|
|
|
|
@Override
|
|
public void run() {
|
|
var updateQueue = this.updateQueue;
|
|
this.updateQueue = new HashMap<>();
|
|
|
|
var retrieveQueue = this.retrieveQueue;
|
|
this.retrieveQueue = new HashMap<>();
|
|
|
|
updateQueue.forEach((key, value) -> redstoneGateways.setPower(key, value));
|
|
retrieveQueue.forEach((key, value) -> value.accept(redstoneGateways.getInboundPower(key)));
|
|
}
|
|
}
|