class yourClass implements IRecipe {
private static final Field eventHandlerField = ReflectionHelper.findField(InventoryCrafting.class, "eventHandler", "field_70465_c");
private static final Field containerPlayerPlayerField = ReflectionHelper.findField(ContainerPlayer.class, "thePlayer", "field_82862_h");
private static final Field slotCraftingPlayerField = ReflectionHelper.findField(SlotCrafting.class, "thePlayer", "field_75238_b");
@SubscribeEvent
public void onCrafting(PlayerEvent.ItemCraftedEvent event) {
//TODO
}
@Override
public boolean matches(InventoryCrafting p_77569_1_, World p_77569_2_) {
EntityPlayer player=findPlayer(p_77569_1_); //получаем игрока...
Non-static field 'eventHandler' cannot be referenced from a static context
class yourClass implements IRecipe {
private static final Field eventHandlerField = ReflectionHelper.findField(InventoryCrafting.class, "eventHandler", "field_70465_c");
private static final Field containerPlayerPlayerField = ReflectionHelper.findField(ContainerPlayer.class, "thePlayer", "field_82862_h");
private static final Field slotCraftingPlayerField = ReflectionHelper.findField(SlotCrafting.class, "thePlayer", "field_75238_b");
@SubscribeEvent
public void onCrafting(PlayerEvent.ItemCraftedEvent event) {
//TODO
}
@Override
public boolean matches(InventoryCrafting p_77569_1_, World p_77569_2_) {
EntityPlayer player=findPlayer(p_77569_1_); //получаем игрока
if(player != null && player.inventory.hasItem(Items.ender_eye) ){
return true; //если в инвентаре есть глаз эндермена-то рецепт "совпадает"
}
return false; //есть нет-то не совпадает
}
//нужный метод на игрока
private static EntityPlayer findPlayer(InventoryCrafting inv) {
try {
Container container = (Container) eventHandlerField.get(inv);
if (container instanceof ContainerPlayer) {
return (EntityPlayer) containerPlayerPlayerField.get(container);
} else if (container instanceof ContainerWorkbench) {
return (EntityPlayer) slotCraftingPlayerField.get(container.getSlot(0));
} else {
return null;
}
} catch (Exception e) {
throw Throwables.propagate(e);
}
}
//Результат крафта
/*
Если во 2-м слоте,первой строки верстака есть палка,то рецепт совпадет,и мы получим яблоко
*/
@Override
public ItemStack getCraftingResult(InventoryCrafting inv) {
ItemStack stack = inv.getStackInSlot(1);
if (stack != null) {
if (stack.getItem() == Items.stick) {
return new ItemStack(Items.apple);
}
}
return null;
}
@Override
public int getRecipeSize() {
return 0;
}
@Override
public ItemStack getRecipeOutput() {
return null;
}
inv при каждом вызове другой даетсяhohserg написал(а):eventHandlerField.get(inv)
может, сразу вот так сохранить, а не Field? Обращение к приватному полю через get - тоже рефлексия