diff options
| author | shedaniel <daniel@shedaniel.me> | 2021-11-14 02:36:33 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2021-11-14 02:36:33 +0800 |
| commit | 760f20e8bdf63ee4af47bb408cdac18e6dd7a591 (patch) | |
| tree | c82c23af4b13334723345612dc65f225f81cf5c3 /runtime/src/main/java/me/shedaniel/rei/plugin | |
| parent | 5b99b04e23728c32387183df3719b1f696e994fe (diff) | |
| parent | 57f59e7da8ae83f1ad952e410601409eecf2e1c4 (diff) | |
| download | RoughlyEnoughItems-760f20e8bdf63ee4af47bb408cdac18e6dd7a591.tar.gz RoughlyEnoughItems-760f20e8bdf63ee4af47bb408cdac18e6dd7a591.tar.bz2 RoughlyEnoughItems-760f20e8bdf63ee4af47bb408cdac18e6dd7a591.zip | |
Merge remote-tracking branch 'origin/6.x-1.17' into 7.x-1.18
# Conflicts:
# gradle.properties
Diffstat (limited to 'runtime/src/main/java/me/shedaniel/rei/plugin')
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(); + } + }); + } } |
