use of com.lothrazar.cyclic.api.IHasClickToggle in project Cyclic by Lothrazar.
the class CharmUtil method getIfEnabled.
public static ItemStack getIfEnabled(Player player, Item match) {
Triple<String, Integer, ItemStack> found = isCurioOrInventory(player, match);
ItemStack stack = found == null ? ItemStack.EMPTY : found.getRight();
if (stack.getItem() instanceof IHasClickToggle) {
IHasClickToggle testMe = (IHasClickToggle) stack.getItem();
if (testMe.isOn(stack) == false) {
// found but player turned it off so dont use it
return ItemStack.EMPTY;
}
}
return stack;
}
use of com.lothrazar.cyclic.api.IHasClickToggle in project Cyclic by Lothrazar.
the class PacketItemToggle method handle.
public static void handle(PacketItemToggle message, Supplier<NetworkEvent.Context> ctx) {
ctx.get().enqueueWork(() -> {
ServerPlayer player = ctx.get().getSender();
if (player.containerMenu == null) {
return;
}
int scount = player.containerMenu.slots.size();
// this is an edge case but it DID happen: put charmin your hotbar and then open a creative inventory tab. avoid index OOB
if (message.slot >= scount) {
// will NOT work in creative mode. slots are messed up
return;
}
Slot slotObj = player.containerMenu.getSlot(message.slot);
if (slotObj != null && !slotObj.getItem().isEmpty()) {
ItemStack maybeCharm = slotObj.getItem();
if (maybeCharm.getItem() instanceof IHasClickToggle) {
// example: is a charm or something
IHasClickToggle c = (IHasClickToggle) maybeCharm.getItem();
c.toggle(player, maybeCharm);
}
}
});
message.done(ctx);
}
use of com.lothrazar.cyclic.api.IHasClickToggle in project Cyclic by Lothrazar.
the class ClientInputEvents method onMouseEvent.
@SubscribeEvent(priority = EventPriority.HIGH)
public void onMouseEvent(ScreenEvent.MouseClickedEvent.Pre event) {
if (event.getScreen() == null || !(event.getScreen() instanceof AbstractContainerScreen<?>)) {
return;
}
AbstractContainerScreen<?> gui = (AbstractContainerScreen<?>) event.getScreen();
boolean rightClickDown = event.getButton() == 1;
try {
if (rightClickDown && gui.getSlotUnderMouse() != null) {
Slot slotHit = gui.getSlotUnderMouse();
if (!slotHit.getItem().isEmpty()) {
ItemStack maybeCharm = slotHit.getItem();
if (maybeCharm.getItem() instanceof IHasClickToggle) {
PacketRegistry.INSTANCE.sendToServer(new PacketItemToggle(slotHit.index));
event.setCanceled(true);
// UtilSound.playSound(ModCyclic.proxy.getClientPlayer(), SoundEvents.UI_BUTTON_CLICK);
} else if (maybeCharm.getItem() instanceof ItemStorageBag) {
PacketRegistry.INSTANCE.sendToServer(new PacketItemGui(slotHit.index));
event.setCanceled(true);
}
}
}
} catch (Exception e) {
// array out of bounds, or we are in a strange third party GUI that doesnt have slots like this
// EXAMPLE: mod.chiselsandbits.bitbag.BagGui
ModCyclic.LOGGER.error("click error", e);
// so this fixes ithttps://github.com/PrinceOfAmber/Cyclic/issues/410
}
}
Aggregations