package fr.lyrgard.hexScape.listener; import java.util.ArrayList; import java.util.List; import com.google.common.eventbus.Subscribe; import fr.lyrgard.hexScape.HexScapeCore; import fr.lyrgard.hexScape.bus.CoreMessageBus; import fr.lyrgard.hexScape.bus.GuiMessageBus; import fr.lyrgard.hexScape.message.DiceThrownMessage; import fr.lyrgard.hexScape.message.ErrorMessage; import fr.lyrgard.hexScape.message.ThrowDiceMessage; import fr.lyrgard.hexScape.model.dice.DiceType; import fr.lyrgard.hexScape.service.DiceService; import fr.lyrgard.hexscape.client.network.ClientNetwork; public class DiceMessageListener { private static DiceMessageListener instance; public static void start() { if (instance == null) { instance = new DiceMessageListener(); CoreMessageBus.register(instance); } } private DiceMessageListener() { } @Subscribe public void onThrowDiceMessage(ThrowDiceMessage message) { if (HexScapeCore.getInstance().isOnline()) { ClientNetwork.getInstance().send(message); } else { String playerId = message.getPlayerId(); String diceTypeId = message.getDiceTypeId(); int number = message.getNumber(); DiceType type = DiceService.getInstance().getDiceType(diceTypeId); if (type == null) { CoreMessageBus.post(new ErrorMessage(playerId, "The dice type \"" + diceTypeId + "\" was not found")); } else { List<Integer> results = new ArrayList<>(); for (int i = 0; i < number; i++) { results.add(roll(type.getFaces().size())); } CoreMessageBus.post(new DiceThrownMessage(playerId, diceTypeId, results)); } } } private int roll(int numberOfFace) { return (int)(Math.random() * (numberOfFace)); } @Subscribe public void onDiceThrownMessage(DiceThrownMessage message) { GuiMessageBus.post(message); } }