* @param goods The <code>Goods</code> to use in a goods party.
     * @param accepted Whether the tax raise was accepted.
     * @param cs A <code>ChangeSet</code> to update.
     */
    public void csRaiseTax(int tax, Goods goods, boolean accepted,
                           ChangeSet cs) {
        GoodsType goodsType = goods.getType();
        Colony colony = (Colony) goods.getLocation();
        int amount = Math.min(goods.getAmount(), GoodsContainer.CARGO_SIZE);

        if (accepted) {
            csSetTax(tax, cs);
            logger.info("Accepted tax raise to: " + tax);
        } else if (colony.getGoodsCount(goodsType) < amount) {
            // Player has removed the goods from the colony,
            // so raise the tax anyway.
            final int extraTax = 3; // TODO, magic number
            csSetTax(tax + extraTax, cs);
            cs.add(See.only(this), ChangePriority.CHANGE_NORMAL,
                new MonarchActionMessage(Monarch.MonarchAction.FORCE_TAX,
                    StringTemplate.template("model.monarch.action.FORCE_TAX")
                    .addAmount("%amount%", tax + extraTax)));
            logger.info("Forced tax raise to: " + (tax + extraTax));
        } else { // Tea party
            Specification spec = getGame().getSpecification();
            colony.getGoodsContainer().saveState();
            colony.removeGoods(goodsType, amount);

            int arrears = market.getPaidForSale(goodsType)
                * spec.getIntegerOption("model.option.arrearsFactor")
                .getValue();
            Market market = getMarket();
            market.setArrears(goodsType, arrears);

            Turn turn = getGame().getTurn();
            List<Modifier> modifiers
                = spec.getModifiers("model.modifier.colonyGoodsParty");
            Modifier template;
            if (modifiers != null && !modifiers.isEmpty()) {
                template = modifiers.get(0);
            } else { // @compat 0.9.x
                template = new Modifier("model.modifier.colonyGoodsParty",
                    Specification.COLONY_GOODS_PARTY_SOURCE,
                    50, Modifier.Type.PERCENTAGE);
                template.setIncrement(-2, Modifier.Type.ADDITIVE, turn, turn);
            } // end compatibility code
            Modifier modifier = Modifier.makeTimedModifier("model.goods.bells",
                                                           template, turn);
            cs.addFeatureChange(this, colony, modifier, true);
            cs.add(See.only(this), colony.getGoodsContainer());
            cs.add(See.only(this), market.getMarketData(goodsType));

            String messageId = goodsType.getId() + ".destroyed";
            if (!Messages.containsKey(messageId)) {
                messageId = (colony.isLandLocked())
                    ? "model.monarch.colonyGoodsParty.landLocked"
                    : "model.monarch.colonyGoodsParty.harbour";
            }
            cs.addMessage(See.only(this),
                new ModelMessage(ModelMessage.MessageType.FOREIGN_DIPLOMACY,
                    messageId, this)
                .addName("%colony%", colony.getName())
                .addAmount("%amount%", amount)
                .add("%goods%", goodsType.getNameKey()));
            cs.addAttribute(See.only(this), "flush", Boolean.TRUE.toString());
            logger.info("Goods party at " + colony.getName()
                + " with: " + goods + " arrears: " + arrears);
        }
    }