aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main/java/me/shedaniel/rei/plugin
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/src/main/java/me/shedaniel/rei/plugin')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/DefaultClientRuntimePlugin.java4
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/PluginStageExecutionWatcher.java18
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/test/REITestPlugin.java24
3 files changed, 38 insertions, 8 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/DefaultClientRuntimePlugin.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/DefaultClientRuntimePlugin.java
index c9c57d4ab..3a174ffa4 100644
--- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/DefaultClientRuntimePlugin.java
+++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/DefaultClientRuntimePlugin.java
@@ -39,6 +39,7 @@ import me.shedaniel.rei.api.client.gui.AbstractRenderer;
import me.shedaniel.rei.api.client.gui.Renderer;
import me.shedaniel.rei.api.client.gui.drag.DraggableStackProviderWidget;
import me.shedaniel.rei.api.client.gui.drag.DraggableStackVisitorWidget;
+import me.shedaniel.rei.api.client.gui.screen.DisplayScreen;
import me.shedaniel.rei.api.client.gui.widgets.Panel;
import me.shedaniel.rei.api.client.gui.widgets.Tooltip;
import me.shedaniel.rei.api.client.gui.widgets.Widgets;
@@ -64,6 +65,7 @@ import me.shedaniel.rei.impl.client.gui.widget.FavoritesListWidget;
import me.shedaniel.rei.plugin.autocrafting.DefaultCategoryHandler;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
+import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.TextComponent;
@@ -225,7 +227,7 @@ public class DefaultClientRuntimePlugin implements REIClientPlugin {
@Override
public boolean doAction(int button) {
- if (!ClientHelper.getInstance().isCheating()) return false;
+ if (!(ClientHelper.getInstance().isCheating() && !(Minecraft.getInstance().screen instanceof DisplayScreen))) return false;
EntryStack<?> entry = stack.copy();
if (!entry.isEmpty()) {
if (entry.getValueType() == FluidStack.class) {
diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/PluginStageExecutionWatcher.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/PluginStageExecutionWatcher.java
index 10326394c..86eddd5c0 100644
--- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/PluginStageExecutionWatcher.java
+++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/PluginStageExecutionWatcher.java
@@ -40,7 +40,7 @@ import java.util.*;
import java.util.stream.Collectors;
public class PluginStageExecutionWatcher implements HintProvider {
- private Map<PluginManager<?>, Set<ReloadStage>> allStages = new HashMap<>();
+ private final Map<PluginManager<?>, Set<ReloadStage>> allStages = new HashMap<>();
public <T extends REIPlugin<?>> Reloadable<? extends T> reloadable(PluginManager<?> manager) {
return new Reloadable<>() {
@@ -53,17 +53,21 @@ public class PluginStageExecutionWatcher implements HintProvider {
@Override
public void startReload(ReloadStage stage) {
- Set<ReloadStage> stages = allStages.computeIfAbsent(manager, $ -> new HashSet<>());
- if (stage.ordinal() == 0) stages.clear();
- stages.add(stage);
+ synchronized (allStages) {
+ Set<ReloadStage> stages = allStages.computeIfAbsent(manager, $ -> new HashSet<>());
+ if (stage.ordinal() == 0) stages.clear();
+ stages.add(stage);
+ }
}
};
}
public Set<ReloadStage> notVisited() {
- Set<ReloadStage> notVisited = new HashSet<>(Arrays.asList(ReloadStage.values()));
- notVisited.removeIf(stage -> allStages.values().stream().allMatch(stages -> stages.contains(stage)));
- return notVisited;
+ synchronized (allStages) {
+ Set<ReloadStage> notVisited = new HashSet<>(Arrays.asList(ReloadStage.values()));
+ notVisited.removeIf(stage -> allStages.values().stream().allMatch(stages -> stages.contains(stage)));
+ return notVisited;
+ }
}
@Override
diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/test/REITestPlugin.java b/runtime/src/main/java/me/shedaniel/rei/plugin/test/REITestPlugin.java
index f9eedfdce..28bbe66ca 100644
--- a/runtime/src/main/java/me/shedaniel/rei/plugin/test/REITestPlugin.java
+++ b/runtime/src/main/java/me/shedaniel/rei/plugin/test/REITestPlugin.java
@@ -23,6 +23,9 @@
package me.shedaniel.rei.plugin.test;
+import com.google.common.collect.ImmutableList;
+import me.shedaniel.rei.api.client.favorites.FavoriteEntry;
+import me.shedaniel.rei.api.client.favorites.FavoriteEntryType;
import me.shedaniel.rei.api.client.plugins.REIClientPlugin;
import me.shedaniel.rei.api.client.registry.entry.EntryRegistry;
import me.shedaniel.rei.api.common.entry.EntryStack;
@@ -30,10 +33,13 @@ import me.shedaniel.rei.api.common.entry.comparison.ItemComparatorRegistry;
import me.shedaniel.rei.api.common.util.EntryStacks;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
+import net.minecraft.client.Minecraft;
import net.minecraft.core.Registry;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.item.Items;
+import net.minecraft.world.level.GameType;
import org.apache.logging.log4j.LogManager;
import org.jetbrains.annotations.TestOnly;
@@ -76,4 +82,22 @@ public class REITestPlugin implements REIClientPlugin {
tag.putInt("Whatever", random.nextInt(Integer.MAX_VALUE));
return stack;
}
+
+ @Override
+ public void registerFavorites(FavoriteEntryType.Registry registry) {
+ registry.registerSystemFavorites(() -> {
+ GameType mode = Minecraft.getInstance().gameMode.getPlayerMode();
+ switch (mode) {
+ case SURVIVAL:
+ return ImmutableList.of(FavoriteEntry.fromEntryStack(EntryStacks.of(Items.STONE)));
+ case CREATIVE:
+ return ImmutableList.of(FavoriteEntry.fromEntryStack(EntryStacks.of(Items.PACKED_ICE)));
+ case ADVENTURE:
+ return ImmutableList.of(FavoriteEntry.fromEntryStack(EntryStacks.of(Items.ANVIL)));
+ case SPECTATOR:
+ default:
+ return ImmutableList.of();
+ }
+ });
+ }
}