Files
thaumicenergistics-neo/src/main/java/thaumicenergistics/integration/jei/CellWorkbenchGhostIngredientHandler.java
T
2026-08-01 16:42:53 +08:00

58 lines
2.4 KiB
Java

package thaumicenergistics.integration.jei;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.client.renderer.Rect2i;
import net.minecraft.resources.ResourceLocation;
import mezz.jei.api.gui.handlers.IGhostIngredientHandler;
import mezz.jei.api.ingredients.ITypedIngredient;
import thaumicenergistics.common.container.GuiEssentiaCellWorkbench;
import thaumicenergistics.common.integration.tc.TCReflection;
import thaumicenergistics.common.network.CellWorkbenchC2SPacket;
/**
* 源质元件工作台分区格的 JEI 拖拽支持:从 JEI 拖拽要素到 63 个分区格之一 → 添加该要素分区。
* 纯 JEI API 实现,不依赖 AE2-JEI-Integration(只装 JEI 即可用)。
*/
public class CellWorkbenchGhostIngredientHandler implements IGhostIngredientHandler<GuiEssentiaCellWorkbench> {
@Override
public <I> List<Target<I>> getTargetsTyped(GuiEssentiaCellWorkbench gui, ITypedIngredient<I> ingredient, boolean doStart) {
List<Target<I>> targets = new ArrayList<>();
if (!(ingredient.getIngredient() instanceof AspectIngredient)) {
return targets;
}
// 63 个分区格都是拖放目标
for (int i = 0; i < GuiEssentiaCellWorkbench.NUMBER_OF_WIDGETS; i++) {
int col = i % GuiEssentiaCellWorkbench.WIDGETS_PER_ROW;
int row = i / GuiEssentiaCellWorkbench.WIDGETS_PER_ROW;
int wx = gui.getGuiLeft() + GuiEssentiaCellWorkbench.WIDGET_POS_X + col * GuiEssentiaCellWorkbench.WIDGET_SIZE;
int wy = gui.getGuiTop() + GuiEssentiaCellWorkbench.WIDGET_POS_Y + row * GuiEssentiaCellWorkbench.WIDGET_SIZE;
targets.add(new Target<>() {
@Override
public Rect2i getArea() {
return new Rect2i(wx, wy, GuiEssentiaCellWorkbench.WIDGET_SIZE, GuiEssentiaCellWorkbench.WIDGET_SIZE);
}
@Override
public void accept(I ingredient) {
if (ingredient instanceof AspectIngredient ai && ai.aspect() != null) {
ResourceLocation aspectId = TCReflection.getAspectId(ai.aspect());
if (aspectId != null) {
CellWorkbenchC2SPacket.sendAddAspect(aspectId);
}
}
}
});
}
return targets;
}
@Override
public void onComplete() {
}
}