Skip to content

Commit

Permalink
refactor: remove AbstractSchedulingNetworkNodeContainerBlockEntity
Browse files Browse the repository at this point in the history
  • Loading branch information
raoulvdberge committed Aug 14, 2024
1 parent 2aef637 commit 366a7bb
Show file tree
Hide file tree
Showing 34 changed files with 388 additions and 439 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@
import com.refinedmods.refinedstorage.api.network.Network;
import com.refinedmods.refinedstorage.api.network.impl.node.SimpleNetworkNode;
import com.refinedmods.refinedstorage.api.network.node.NetworkNodeActor;
import com.refinedmods.refinedstorage.api.network.node.task.Task;
import com.refinedmods.refinedstorage.api.network.node.task.TaskExecutor;
import com.refinedmods.refinedstorage.api.network.node.SchedulingMode;
import com.refinedmods.refinedstorage.api.resource.ResourceKey;
import com.refinedmods.refinedstorage.api.storage.Actor;
import com.refinedmods.refinedstorage.common.Platform;
Expand All @@ -15,7 +14,13 @@
import com.refinedmods.refinedstorage.common.content.ContentNames;
import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock;
import com.refinedmods.refinedstorage.common.support.BlockEntityWithDrops;
import com.refinedmods.refinedstorage.common.support.network.AbstractSchedulingNetworkNodeContainerBlockEntity;
import com.refinedmods.refinedstorage.common.support.FilterWithFuzzyMode;
import com.refinedmods.refinedstorage.common.support.SchedulingModeContainer;
import com.refinedmods.refinedstorage.common.support.SchedulingModeType;
import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider;
import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity;
import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData;
import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl;
import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer;
import com.refinedmods.refinedstorage.common.upgrade.UpgradeDestinations;
import com.refinedmods.refinedstorage.common.util.ContainerUtil;
Expand All @@ -30,7 +35,9 @@
import net.minecraft.core.HolderLookup;
import net.minecraft.core.NonNullList;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.chat.Component;
import net.minecraft.network.codec.StreamEncoder;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player;
Expand All @@ -39,18 +46,17 @@
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.state.BlockState;

public class ConstructorBlockEntity
extends AbstractSchedulingNetworkNodeContainerBlockEntity<SimpleNetworkNode, ConstructorBlockEntity.TaskContext>
implements BlockEntityWithDrops {
public class ConstructorBlockEntity extends BaseNetworkNodeContainerBlockEntity<SimpleNetworkNode>
implements BlockEntityWithDrops, NetworkNodeExtendedMenuProvider<ResourceContainerData> {
private static final String TAG_DROP_ITEMS = "di";
private static final String TAG_UPGRADES = "upgr";

private final Actor actor;
private final List<TaskImpl> tasks = new ArrayList<>();
private final List<ConstructorTask> tasks = new ArrayList<>();
private final UpgradeContainer upgradeContainer;
private final FilterWithFuzzyMode filter;
private final SchedulingModeContainer schedulingModeContainer;

@Nullable
private TaskExecutor<TaskContext> taskExecutor;
@Nullable
private ConstructorStrategy strategy;
private boolean dropItems;
Expand All @@ -72,6 +78,12 @@ public ConstructorBlockEntity(final BlockPos pos, final BlockState state) {
initialize(serverLevel);
}
});
this.schedulingModeContainer = new SchedulingModeContainer(schedulingMode -> setChanged());
this.filter = FilterWithFuzzyMode.createAndListenForFilters(
ResourceContainerImpl.createForFilter(),
this::setChanged,
this::setFilters
);
}

@Override
Expand All @@ -89,10 +101,9 @@ public boolean addUpgradeItem(final Item upgradeItem) {
return upgradeContainer.addUpgradeItem(upgradeItem);
}

@Override
protected void setFilters(final List<ResourceKey> filters) {
private void setFilters(final List<ResourceKey> filters) {
this.tasks.clear();
this.tasks.addAll(filters.stream().map(TaskImpl::new).toList());
this.tasks.addAll(filters.stream().map(ConstructorTask::new).toList());
}

@Override
Expand All @@ -119,19 +130,13 @@ private ConstructorStrategy createStrategy(final ServerLevel serverLevel, final
return new CompositeConstructorStrategy(strategies);
}

// TODO: Move to own obj :)
@Override
public void postDoWork() {
if (taskExecutor == null
|| mainNetworkNode.getNetwork() == null
|| !mainNetworkNode.isActive()
|| !(level instanceof ServerLevel serverLevel)) {
if (mainNetworkNode.getNetwork() == null || !mainNetworkNode.isActive()) {
return;
}
final Player fakePlayer = getFakePlayer(serverLevel);
taskExecutor.execute(tasks, new TaskContext(
mainNetworkNode.getNetwork(),
fakePlayer
));
schedulingModeContainer.execute(tasks);
}

@Override
Expand All @@ -152,6 +157,8 @@ public void loadAdditional(final CompoundTag tag, final HolderLookup.Provider pr
public void writeConfiguration(final CompoundTag tag, final HolderLookup.Provider provider) {
super.writeConfiguration(tag, provider);
tag.putBoolean(TAG_DROP_ITEMS, dropItems);
schedulingModeContainer.writeToTag(tag);
filter.save(tag, provider);
}

@Override
Expand All @@ -160,6 +167,27 @@ public void readConfiguration(final CompoundTag tag, final HolderLookup.Provider
if (tag.contains(TAG_DROP_ITEMS)) {
dropItems = tag.getBoolean(TAG_DROP_ITEMS);
}
schedulingModeContainer.loadFromTag(tag);
filter.load(tag, provider);
}

void setSchedulingModeType(final SchedulingModeType type) {
schedulingModeContainer.setType(type);
}

SchedulingModeType getSchedulingModeType() {
return schedulingModeContainer.getType();
}

boolean isFuzzyMode() {
return filter.isFuzzyMode();
}

void setFuzzyMode(final boolean fuzzyMode) {
filter.setFuzzyMode(fuzzyMode);
if (level instanceof ServerLevel serverLevel) {
initialize(serverLevel);
}
}

@Override
Expand Down Expand Up @@ -191,32 +219,36 @@ public AbstractContainerMenu createMenu(final int syncId, final Inventory invent
}

@Override
protected void setTaskExecutor(final TaskExecutor<TaskContext> taskExecutor) {
this.taskExecutor = taskExecutor;
public ResourceContainerData getMenuData() {
return ResourceContainerData.of(filter.getFilterContainer());
}

@Override
protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate(final BlockState oldBlockState,
final BlockState newBlockState) {
return AbstractDirectionalBlock.doesBlockStateChangeWarrantNetworkNodeUpdate(oldBlockState, newBlockState);
public StreamEncoder<RegistryFriendlyByteBuf, ResourceContainerData> getMenuCodec() {
return ResourceContainerData.STREAM_CODEC;
}

protected record TaskContext(Network network, Player player) {
@Override
protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate(final BlockState oldBlockState,
final BlockState newBlockState) {
return AbstractDirectionalBlock.didDirectionChange(oldBlockState, newBlockState);
}

private class TaskImpl implements Task<TaskContext> {
private class ConstructorTask implements SchedulingMode.ScheduledTask {
private final ResourceKey filter;

private TaskImpl(final ResourceKey filter) {
private ConstructorTask(final ResourceKey filter) {
this.filter = filter;
}

@Override
public boolean run(final TaskContext context) {
if (strategy == null) {
public boolean run() {
final Network network = mainNetworkNode.getNetwork();
if (strategy == null || !(level instanceof ServerLevel serverLevel) || network == null) {
return false;
}
strategy.apply(filter, actor, context.player, context.network);
final Player player = getFakePlayer(serverLevel);
strategy.apply(filter, actor, player, network);
return true;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@

import com.refinedmods.refinedstorage.common.api.support.resource.ResourceContainer;
import com.refinedmods.refinedstorage.common.content.Menus;
import com.refinedmods.refinedstorage.common.support.containermenu.AbstractSchedulingContainerMenu;
import com.refinedmods.refinedstorage.common.support.RedstoneMode;
import com.refinedmods.refinedstorage.common.support.SchedulingModeType;
import com.refinedmods.refinedstorage.common.support.containermenu.AbstractSimpleFilterContainerMenu;
import com.refinedmods.refinedstorage.common.support.containermenu.ClientProperty;
import com.refinedmods.refinedstorage.common.support.containermenu.PropertyTypes;
import com.refinedmods.refinedstorage.common.support.containermenu.ServerProperty;
import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData;
import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer;
Expand All @@ -15,7 +18,7 @@

import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation;

public class ConstructorContainerMenu extends AbstractSchedulingContainerMenu<ConstructorBlockEntity> {
public class ConstructorContainerMenu extends AbstractSimpleFilterContainerMenu<ConstructorBlockEntity> {
private static final MutableComponent FILTER_HELP = createTranslation("gui", "constructor.filter_help");

public ConstructorContainerMenu(final int syncId,
Expand Down Expand Up @@ -49,13 +52,29 @@ public ConstructorContainerMenu(final int syncId,

@Override
protected void registerClientProperties() {
super.registerClientProperties();
registerProperty(new ClientProperty<>(PropertyTypes.FUZZY_MODE, false));
registerProperty(new ClientProperty<>(PropertyTypes.REDSTONE_MODE, RedstoneMode.IGNORE));
registerProperty(new ClientProperty<>(PropertyTypes.SCHEDULING_MODE, SchedulingModeType.DEFAULT));
registerProperty(new ClientProperty<>(ConstructorDestructorPropertyTypes.DROP_ITEMS, false));
}

@Override
protected void registerServerProperties(final ConstructorBlockEntity blockEntity) {
super.registerServerProperties(blockEntity);
registerProperty(new ServerProperty<>(
PropertyTypes.FUZZY_MODE,
blockEntity::isFuzzyMode,
blockEntity::setFuzzyMode
));
registerProperty(new ServerProperty<>(
PropertyTypes.REDSTONE_MODE,
blockEntity::getRedstoneMode,
blockEntity::setRedstoneMode
));
registerProperty(new ServerProperty<>(
PropertyTypes.SCHEDULING_MODE,
blockEntity::getSchedulingModeType,
blockEntity::setSchedulingModeType
));
registerProperty(new ServerProperty<>(
ConstructorDestructorPropertyTypes.DROP_ITEMS,
blockEntity::isDropItems,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,6 @@ public void postDoWork() {
@Override
protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate(final BlockState oldBlockState,
final BlockState newBlockState) {
return AbstractDirectionalBlock.doesBlockStateChangeWarrantNetworkNodeUpdate(oldBlockState, newBlockState);
return AbstractDirectionalBlock.didDirectionChange(oldBlockState, newBlockState);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,6 @@ public void updateActiveness(final BlockState state, @Nullable final BooleanProp
@Override
protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate(final BlockState oldBlockState,
final BlockState newBlockState) {
return AbstractDirectionalBlock.doesBlockStateChangeWarrantNetworkNodeUpdate(oldBlockState, newBlockState);
return AbstractDirectionalBlock.didDirectionChange(oldBlockState, newBlockState);
}
}
Loading

0 comments on commit 366a7bb

Please sign in to comment.