diff options
Diffstat (limited to 'runtime/src/main/java/me/shedaniel/rei/plugin')
| -rw-r--r-- | runtime/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultCategoryHandler.java | 19 | ||||
| -rw-r--r-- | runtime/src/main/java/me/shedaniel/rei/plugin/common/runtime/DefaultRuntimePlugin.java | 52 |
2 files changed, 65 insertions, 6 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultCategoryHandler.java b/runtime/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultCategoryHandler.java index 6924b9a28..426e19f57 100644 --- a/runtime/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultCategoryHandler.java +++ b/runtime/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultCategoryHandler.java @@ -55,22 +55,29 @@ import net.minecraft.world.item.ItemStack; import java.util.ArrayList; import java.util.List; +import java.util.Optional; @Environment(EnvType.CLIENT) public class DefaultCategoryHandler implements TransferHandler { @Override + public ApplicabilityResult checkApplicable(Context context) { + Display display = context.getDisplay(); + AbstractContainerScreen<?> containerScreen = context.getContainerScreen(); + if (containerScreen == null) return ApplicabilityResult.createNotApplicable(); + AbstractContainerMenu menu = context.getMenu(); + MenuInfoContext<AbstractContainerMenu, Player, Display> menuInfoContext = ofContext(menu, display); + MenuInfo<AbstractContainerMenu, Display> menuInfo = MenuInfoRegistry.getInstance().getClient(display, menuInfoContext, menu); + if (menuInfo == null) return ApplicabilityResult.createNotApplicable(); + return ApplicabilityResult.createApplicable(); + } + + @Override public Result handle(Context context) { Display display = context.getDisplay(); AbstractContainerScreen<?> containerScreen = context.getContainerScreen(); - if (containerScreen == null) { - return Result.createNotApplicable(); - } AbstractContainerMenu menu = context.getMenu(); MenuInfoContext<AbstractContainerMenu, Player, Display> menuInfoContext = ofContext(menu, display); MenuInfo<AbstractContainerMenu, Display> menuInfo = MenuInfoRegistry.getInstance().getClient(display, menuInfoContext, menu); - if (menuInfo == null) { - return Result.createNotApplicable(); - } try { menuInfo.validate(menuInfoContext); } catch (MenuTransferException e) { diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/common/runtime/DefaultRuntimePlugin.java b/runtime/src/main/java/me/shedaniel/rei/plugin/common/runtime/DefaultRuntimePlugin.java index 1fd0126d5..ca1e44846 100644 --- a/runtime/src/main/java/me/shedaniel/rei/plugin/common/runtime/DefaultRuntimePlugin.java +++ b/runtime/src/main/java/me/shedaniel/rei/plugin/common/runtime/DefaultRuntimePlugin.java @@ -30,10 +30,18 @@ import me.shedaniel.rei.api.common.entry.type.EntryTypeRegistry; import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes; import me.shedaniel.rei.api.common.fluid.FluidSupportProvider; import me.shedaniel.rei.api.common.plugins.REIServerPlugin; +import me.shedaniel.rei.api.common.transfer.info.stack.PlayerInventorySlotAccessor; +import me.shedaniel.rei.api.common.transfer.info.stack.SlotAccessor; +import me.shedaniel.rei.api.common.transfer.info.stack.SlotAccessorRegistry; +import me.shedaniel.rei.api.common.transfer.info.stack.VanillaSlotAccessor; import me.shedaniel.rei.plugin.client.entry.FluidEntryDefinition; import me.shedaniel.rei.plugin.client.entry.ItemEntryDefinition; +import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.Nullable; import java.util.Optional; import java.util.stream.Stream; @@ -55,4 +63,48 @@ public class DefaultRuntimePlugin implements REIServerPlugin { return CompoundEventResult.interruptTrue(stream.get()); }); } + + @Override + public void registerSlotAccessors(SlotAccessorRegistry registry) { + registry.register(new ResourceLocation("roughlyenoughitems", "vanilla"), + slotAccessor -> slotAccessor instanceof VanillaSlotAccessor, + new SlotAccessorRegistry.Serializer() { + @Override + public SlotAccessor read(AbstractContainerMenu menu, Player player, CompoundTag tag) { + int slot = tag.getInt("Slot"); + return new VanillaSlotAccessor(menu.slots.get(slot)); + } + + @Override + @Nullable + public CompoundTag save(AbstractContainerMenu menu, Player player, SlotAccessor accessor) { + if (!(accessor instanceof VanillaSlotAccessor)) { + throw new IllegalArgumentException("Cannot save non-vanilla slot accessor!"); + } + CompoundTag tag = new CompoundTag(); + tag.putInt("Slot", ((VanillaSlotAccessor) accessor).getSlot().index); + return tag; + } + }); + registry.register(new ResourceLocation("roughlyenoughitems", "player"), + slotAccessor -> slotAccessor instanceof PlayerInventorySlotAccessor, + new SlotAccessorRegistry.Serializer() { + @Override + public SlotAccessor read(AbstractContainerMenu menu, Player player, CompoundTag tag) { + int slot = tag.getInt("Slot"); + return new PlayerInventorySlotAccessor(player, slot); + } + + @Override + @Nullable + public CompoundTag save(AbstractContainerMenu menu, Player player, SlotAccessor accessor) { + if (!(accessor instanceof PlayerInventorySlotAccessor)) { + throw new IllegalArgumentException("Cannot save non-player slot accessor!"); + } + CompoundTag tag = new CompoundTag(); + tag.putInt("Slot", ((PlayerInventorySlotAccessor) accessor).getIndex()); + return tag; + } + }); + } } |
