Загрузка данных
package com.nerzul.blueprintfixer.mixin;
import blusunrize.immersiveengineering.api.crafting.BlueprintCraftingRecipe;
import blusunrize.immersiveengineering.common.gui.ContainerModWorkbench;
import blusunrize.immersiveengineering.common.gui.IESlot;
import blusunrize.immersiveengineering.common.gui.InventoryBlueprint;
import com.nerzul.blueprintfixer.Registry.BlueprintGroup;
import com.nerzul.blueprintfixer.Registry.BlueprintGroupRegistry;
import com.nerzul.blueprintfixer.gui.BlueprintBackSlot;
import com.nerzul.blueprintfixer.gui.BlueprintGroupSlot;
import com.nerzul.blueprintfixer.gui.BlueprintGuiState;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.init.Items;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ClickType;
import java.util.List;
@Mixin(ContainerModWorkbench.class)
public abstract class MixinContainerModWorkbench {
@Shadow
private InventoryBlueprint inventoryBPoutput;
@Inject(
method = "rebindSlots",
at = @At("TAIL"),
remap = false
)
private void addBlueprintGroups(CallbackInfo ci) {
ContainerModWorkbench container =
(ContainerModWorkbench)(Object)this;
if (inventoryBPoutput == null)
return;
List<BlueprintGroup> groups =
BlueprintGroupRegistry.getAll();
int index = 0;
for (BlueprintGroup group : groups) {
int x = 118 + (index % 3) * 18;
int y = 21 + (index / 3) * 18;
container.field_75151_b.add(
new BlueprintGroupSlot(
inventoryBPoutput,
inventoryBPoutput.getSizeInventory() + index,
x,
y,
group.getIcon(),
group.getId()
)
);
index++;
}
if (BlueprintGuiState.isGroupOpen(container)) {
container.field_75151_b.add(
new BlueprintBackSlot(
inventoryBPoutput,
inventoryBPoutput.getSizeInventory() + index,
100,
3,
new ItemStack(Items.ARROW)
)
);
}
}
@Inject(
method = "func_184996_a",
at = @At("HEAD"),
cancellable = true,
remap = false
)
private void handleBlueprintGroups(
int id,
int button,
ClickType clickType,
EntityPlayer player,
CallbackInfoReturnable<ItemStack> cir
) {
ContainerModWorkbench container =
(ContainerModWorkbench)(Object)this;
if (id < 0 || id >= container.field_75151_b.size())
return;
Slot slot =
container.field_75151_b.get(id);
if (slot instanceof BlueprintGroupSlot) {
BlueprintGroupSlot groupSlot =
(BlueprintGroupSlot)slot;
BlueprintGuiState.open(
container,
groupSlot.getGroupId()
);
container.rebindSlots();
cir.setReturnValue(ItemStack.field_190927_a);
return;
}
if (slot instanceof BlueprintBackSlot) {
BlueprintGuiState.close(container);
container.rebindSlots();
cir.setReturnValue(ItemStack.field_190927_a);
}
}
@Inject(
method = "func_82846_b",
at = @At("HEAD"),
cancellable = true,
remap = false
)
private void preventGroupShiftClick(
EntityPlayer player,
int slot,
CallbackInfoReturnable<ItemStack> cir
) {
ContainerModWorkbench container =
(ContainerModWorkbench)(Object)this;
if (slot < 0 || slot >= container.field_75151_b.size())
return;
Slot slotObject =
container.field_75151_b.get(slot);
if (slotObject instanceof BlueprintGroupSlot ||
slotObject instanceof BlueprintBackSlot) {
cir.setReturnValue(ItemStack.field_190927_a);
}
}
}