Skip to content

Commit

Permalink
chore: improve logging and precondition checks when selling items to …
Browse files Browse the repository at this point in the history
…market

Contributes to #167
  • Loading branch information
skaldarnar committed Aug 28, 2021
1 parent 4c7622c commit e1ae15e
Showing 1 changed file with 25 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@
package org.terasology.metalrenegades.economy.systems;


import com.google.common.base.Preconditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.gestalt.assets.management.AssetManager;
import org.terasology.dynamicCities.buildings.components.SettlementRefComponent;
import org.terasology.dynamicCities.construction.events.BuildingEntitySpawnedEvent;
import org.terasology.dynamicCities.playerTracking.PlayerTracker;
Expand Down Expand Up @@ -36,7 +35,6 @@
import org.terasology.engine.entitySystem.systems.RegisterMode;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
import org.terasology.engine.entitySystem.systems.UpdateSubscriberSystem;
import org.terasology.module.inventory.systems.InventoryManager;
import org.terasology.engine.logic.inventory.ItemComponent;
import org.terasology.engine.logic.players.event.OnPlayerSpawnedEvent;
import org.terasology.engine.network.NetworkComponent;
Expand All @@ -45,10 +43,14 @@
import org.terasology.engine.world.block.BlockManager;
import org.terasology.engine.world.block.entity.BlockCommands;
import org.terasology.engine.world.block.items.BlockItemComponent;
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.gestalt.assets.management.AssetManager;
import org.terasology.metalrenegades.economy.events.MarketTransactionRequest;
import org.terasology.metalrenegades.economy.events.TransactionType;
import org.terasology.metalrenegades.economy.ui.MarketItem;
import org.terasology.module.inventory.systems.InventoryManager;

import java.util.Arrays;
import java.util.Set;

/**
Expand All @@ -58,6 +60,10 @@
@RegisterSystem(RegisterMode.AUTHORITY)
public class MarketManagementSystem extends BaseComponentSystem implements UpdateSubscriberSystem {

private static final Logger logger = LoggerFactory.getLogger(MarketManagementSystem.class);

private static final int COOLDOWN = 200;

@In
private EntityManager entityManager;

Expand Down Expand Up @@ -85,11 +91,8 @@ public class MarketManagementSystem extends BaseComponentSystem implements Updat
@In
private WalletAuthoritySystem walletAuthoritySystem;

private final int COOLDOWN = 200;
private int counter = 0;

private Logger logger = LoggerFactory.getLogger(MarketManagementSystem.class);

@ReceiveEvent
public void onPlayerJoin(OnPlayerSpawnedEvent onPlayerSpawnedEvent, EntityRef player) {
EntityRef playerResourceStore = entityManager.create();
Expand Down Expand Up @@ -186,13 +189,26 @@ private MarketItem buy(EntityRef character, MarketItem item) {
}

private MarketItem sell(EntityRef character, MarketItem item) {
if (item.quantity <=0 || !destroyItemOrBlock(character, item.name)) {
logger.warn("Failed to destroy entity");
Preconditions.checkArgument(
character.hasAllComponents(Arrays.asList(PlayerResourceStoreComponent.class, SettlementRefComponent.class)),
"Entity must have both PlayerResourceStoreComponent and SettlementRefComponent when selling items to market.");

if (item.quantity <= 0 || !destroyItemOrBlock(character, item.name)) {
logger.warn("Failed to destroy item entity for '{}' ({})", item.displayName, item.name);
return item;
}

EntityRef playerResourceStore = character.getComponent(PlayerResourceStoreComponent.class).resourceStore;
SettlementRefComponent settlementRefComponent = character.getComponent(SettlementRefComponent.class);
playerResourceStore.send(new ResourceStoreEvent(item.name, 1, settlementRefComponent.settlement.getComponent(MarketComponent.class).market));

if (!settlementRefComponent.settlement.hasComponent(MarketComponent.class)) {
logger.error("Cannot sell items to a settlement without MarketComponent: {}",
settlementRefComponent.settlement.toFullDescription());
return item;
}
MarketComponent marketComponent = settlementRefComponent.settlement.getComponent(MarketComponent.class);

playerResourceStore.send(new ResourceStoreEvent(item.name, 1, marketComponent.market));

character.send(new WalletTransactionEvent(item.cost));
item.quantity--;
Expand Down

0 comments on commit e1ae15e

Please sign in to comment.