package openperipheral.integration.mystcraft.v2; import com.xcompwiz.mystcraft.api.item.IItemPageCollection; import java.util.List; import net.minecraft.item.ItemStack; import net.minecraft.world.WorldServer; import openmods.fakeplayer.FakePlayerPool; import openmods.fakeplayer.FakePlayerPool.PlayerUserReturning; import openmods.fakeplayer.OpenModsFakePlayer; import openperipheral.api.adapter.AdapterSourceName; import openperipheral.api.adapter.Asynchronous; import openperipheral.api.adapter.method.Arg; import openperipheral.api.adapter.method.ReturnType; import openperipheral.api.adapter.method.ScriptCallable; import openperipheral.api.adapter.method.ScriptObject; import openperipheral.api.helpers.Index; @ScriptObject @Asynchronous @AdapterSourceName("notebook") public class NotebookWrapper { private final WorldServer ownerWorld; private IItemPageCollection item; private ItemStack stack; public NotebookWrapper(WorldServer ownerWorld, IItemPageCollection item, ItemStack stack) { super(); this.ownerWorld = ownerWorld; this.item = item; this.stack = stack; } @ScriptCallable(returnTypes = ReturnType.STRING) public String getName() { return FakePlayerPool.instance.executeOnPlayer(ownerWorld, new PlayerUserReturning<String>() { @Override public String usePlayer(OpenModsFakePlayer fakePlayer) { return item.getDisplayName(fakePlayer, stack); } }); } @ScriptCallable(returnTypes = ReturnType.TABLE, name = "getAllPages") public List<ItemStack> getPages() { return FakePlayerPool.instance.executeOnPlayer(ownerWorld, new PlayerUserReturning<List<ItemStack>>() { @Override public List<ItemStack> usePlayer(OpenModsFakePlayer fakePlayer) { return item.getItems(fakePlayer, stack); } }); } @ScriptCallable(returnTypes = ReturnType.NUMBER) public int getSlotCount(int slot) { return getPages().size(); } @ScriptCallable(returnTypes = ReturnType.TABLE) public ItemStack getPageFromSlot(@Arg(name = "slot") Index slot) { List<ItemStack> pages = getPages(); slot.checkElementIndex("slot", pages.size()); return pages.get(slot.value); } public ItemStack removePage(final ItemStack page) { return FakePlayerPool.instance.executeOnPlayer(ownerWorld, new PlayerUserReturning<ItemStack>() { @Override public ItemStack usePlayer(OpenModsFakePlayer fakePlayer) { return item.remove(fakePlayer, stack, page); } }); } public ItemStack addPage(final ItemStack page) { return FakePlayerPool.instance.executeOnPlayer(ownerWorld, new PlayerUserReturning<ItemStack>() { @Override public ItemStack usePlayer(OpenModsFakePlayer fakePlayer) { return item.addPage(fakePlayer, stack, page); } }); } }