Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added Hide Non-Starred Mobs Nametags and Hide Terracota Nametags #4

Merged
merged 55 commits into from
Mar 14, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
938e603
Add files via upload
AzuredBlue Feb 14, 2021
cae15f0
Added /armorcolor to /skytils help
AzuredBlue Feb 15, 2021
e1ab11f
same as before but actually uploading the file i changed
AzuredBlue Feb 15, 2021
76338b5
updated with /armourcolour
AzuredBlue Feb 15, 2021
5735cec
Delete SkytilsMod-main directory
AzuredBlue Feb 15, 2021
2f9a28a
Delete SkytilsCommand.java
AzuredBlue Feb 15, 2021
2317aa8
Update SkytilsCommand.java
AzuredBlue Feb 15, 2021
6161e82
Attempt to update to 0.0.7 prerelease
AzuredBlue Feb 15, 2021
ab429b4
more stufffff
AzuredBlue Feb 15, 2021
38a182d
Update build.gradle
AzuredBlue Feb 15, 2021
743d78c
Show terminals that you have done
AzuredBlue Feb 17, 2021
8ce3cb1
Added some new "hide" features for dungeons
AzuredBlue Feb 17, 2021
69c9788
forgot to add /skytils help bruh
AzuredBlue Feb 17, 2021
6a8e9be
aaaaaaaaa
AzuredBlue Feb 17, 2021
b77fba6
Added wither essence to Hide Blessings
AzuredBlue Feb 17, 2021
e907234
Hide Farming RNG Titles
AzuredBlue Feb 17, 2021
3b76347
updated to latest
AzuredBlue Feb 19, 2021
3e6520c
a
AzuredBlue Feb 19, 2021
9c72f9a
Merge branch 'main' into main
AzuredBlue Feb 19, 2021
dcb3cc6
Changed username string so brainless people dont complain about sessi…
AzuredBlue Feb 20, 2021
5b5a932
reverted because crash crash = bad
AzuredBlue Feb 20, 2021
e2dd7c2
updated
AzuredBlue Feb 20, 2021
f3b2730
Merge branch 'main' into main
AzuredBlue Feb 20, 2021
a3acd02
Delete ThreeWeirdoSolver.java
My-Name-Is-Jeff Feb 20, 2021
8c27751
Delete SpamHider.java
My-Name-Is-Jeff Feb 20, 2021
65ddf67
Change username to .getName
My-Name-Is-Jeff Feb 20, 2021
977f152
Code cleanup
My-Name-Is-Jeff Feb 20, 2021
415aef7
Add files via upload
AzuredBlue Feb 20, 2021
8d7d93e
Moved Hide Abilities to Spam
AzuredBlue Feb 20, 2021
7bbe2c4
Fixed abilities hiding outside dungeons
AzuredBlue Feb 20, 2021
f2076f1
Added some dungeons stuff to the Spam Hider
AzuredBlue Feb 21, 2021
a4ff430
Change username to .getName
AzuredBlue Feb 21, 2021
4e12c3c
Added "Can't Use Ability in this room" hider
AzuredBlue Feb 21, 2021
3032bae
update!1
AzuredBlue Feb 23, 2021
35e7516
Merge branch 'main' into main
AzuredBlue Feb 23, 2021
55e9284
Update SpamHider.java
My-Name-Is-Jeff Feb 25, 2021
a5a5a00
Merge branch 'main' into main
My-Name-Is-Jeff Feb 25, 2021
22dae32
Added Hide F4 Nametags and crowd messages
AzuredBlue Mar 1, 2021
e94736e
Merge branch 'main' into main
AzuredBlue Mar 1, 2021
fbffefd
oops
AzuredBlue Mar 1, 2021
64a373d
Update Config.java
My-Name-Is-Jeff Mar 1, 2021
50ab1d5
Hiding more nametags because im only decent at that
AzuredBlue Mar 6, 2021
f9dff10
Merge branch 'main' into main
AzuredBlue Mar 7, 2021
bd8922b
Hide tooltips in terminal solvers
AzuredBlue Mar 8, 2021
1a5b1c0
is it really a mistake if only i noticed
AzuredBlue Mar 8, 2021
f4aafee
Stop clicking non-salvagable items in the Salvage menu
AzuredBlue Mar 9, 2021
50db337
Removed an extra extraAttr check
AzuredBlue Mar 9, 2021
28be064
Added Kill Combo hider
AzuredBlue Mar 9, 2021
256da3b
Improved stop clicking on Non-Salvageable Items
AzuredBlue Mar 13, 2021
7ddfd27
Merge branch 'main' into main
AzuredBlue Mar 13, 2021
9d680fa
ok
AzuredBlue Mar 14, 2021
2d78c02
Merge branch 'main' of https://github.com/AzuredBlue/SkytilsMod-1 int…
AzuredBlue Mar 14, 2021
dc6aec2
thanks github desktop
AzuredBlue Mar 14, 2021
660c61b
Fix code style
My-Name-Is-Jeff Mar 14, 2021
4951ba4
Fix code style pt. 2
My-Name-Is-Jeff Mar 14, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions src/main/java/skytils/skytilsmod/core/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,24 @@ public class Config extends Vigilant {
)
public boolean hideWitherMinerNametags = false;

@Property(
type = PropertyType.SWITCH,
name = "Hide Terracotta Nametags",
description = "Hides the nametags of the Terracotta while in Dungeons",
category = "Dungeons",
subcategory = "Quality of Life"
)
public boolean hideTerracotaNametags = false;

@Property(
type = PropertyType.SWITCH,
name = "Hide Non-Starred Mobs Nametags",
description = "Hides the nametags of non-starred mobs while in Dungeons",
category = "Dungeons",
subcategory = "Quality of Life"
)
public boolean hideNonStarredNametags = false;

@Property(
type = PropertyType.SWITCH,
name = "Larger Bat Models",
Expand Down Expand Up @@ -817,6 +835,15 @@ public class Config extends Vigilant {
)
public boolean showArachneHP = false;

@Property(
type = PropertyType.SWITCH,
name = "Stop Clicking Non-Salvageable Items",
description = "Stops you from clicking Non-Salvageable items while in the Salvage menu",
category = "Miscellaneous",
subcategory = "Quality of Life"
)
public boolean stopClickingNonSalvageable = false;

@Property(
type = PropertyType.SWITCH,
name = "View Relic Waypoints",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ public void onSendChatMessage(SendChatMessageEvent event) {
event.setCanceled(true);
}
}

// Show hidden fels
@SubscribeEvent
public void onRenderLivingPre(RenderLivingEvent.Pre event) {
Expand Down Expand Up @@ -205,10 +205,21 @@ public void onRenderLivingPre(RenderLivingEvent.Pre event) {
}
}
}


if (Skytils.config.hideNonStarredNametags && event.entity instanceof EntityArmorStand && event.entity.hasCustomName()) {
String name = StringUtils.stripControlCodes(event.entity.getCustomNameTag());
if (!name.startsWith("✯ ") && name.contains("❤"))
if (name.contains("Lurker") || name.contains("Dreadlord") || name.contains("Souleater") || name.contains("Zombie") || name.contains("Skeleton") || name.contains("Skeletor") || name.contains("Sniper") || name.contains("Super Archer") || name.contains("Spider") || name.contains("Fels") || name.contains("Withermancer"))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok

mc.theWorld.removeEntity(event.entity);
}
}
if (Skytils.config.hideTerracotaNametags && event.entity instanceof EntityArmorStand && event.entity.hasCustomName()) {
String name = StringUtils.stripControlCodes(event.entity.getCustomNameTag());
if (name.contains("Terracotta "))
mc.theWorld.removeEntity(event.entity);
}
if (event.entity instanceof EntityBat && Skytils.config.showBatHitboxes && !mc.getRenderManager().isDebugBoundingBox() && !event.entity.isInvisible()) {
RenderUtil.drawOutlinedBoundingBox(event.entity.getEntityBoundingBox(), new Color(0, 255, 255, 255), 3, 1f);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ public class ClickInOrderSolver {
@SubscribeEvent
public void onTick(TickEvent.ClientTickEvent event) {

if (event.phase != TickEvent.Phase.START || !Utils.inDungeons || mc.thePlayer == null || mc.theWorld == null) return;
if (event.phase != TickEvent.Phase.START || !Utils.inDungeons || mc.thePlayer == null || mc.theWorld == null)
return;

if (!Skytils.config.clickInOrderTerminalSolver) return;

Expand Down Expand Up @@ -110,7 +111,7 @@ public void onDrawSlot(GuiContainerEvent.DrawSlotEvent.Pre event) {
GlStateManager.disableLighting();
GlStateManager.disableDepth();
GlStateManager.disableBlend();
fr.drawStringWithShadow(String.valueOf(item.stackSize), (float)(slot.xDisplayPosition + 9 - fr.getStringWidth(String.valueOf(item.stackSize)) / 2), (float)(slot.yDisplayPosition + 4), 16777215);
fr.drawStringWithShadow(String.valueOf(item.stackSize), (float) (slot.xDisplayPosition + 9 - fr.getStringWidth(String.valueOf(item.stackSize)) / 2), (float) (slot.yDisplayPosition + 4), 16777215);
GlStateManager.enableLighting();
GlStateManager.enableDepth();
event.setCanceled(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,15 @@

import com.google.common.collect.ImmutableList;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.gui.inventory.GuiChest;
import net.minecraft.inventory.ContainerChest;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.EnumDyeColor;
import net.minecraft.item.ItemStack;
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
import skytils.skytilsmod.Skytils;
Expand Down Expand Up @@ -55,7 +59,8 @@ public void onTick(TickEvent.ClientTickEvent event) {
ItemStack item = slot.getStack();
if (item == null) continue;
if (item.isItemEnchanted()) continue;
if (slot.slotNumber < 9 || slot.slotNumber > 44 || slot.slotNumber % 9 == 0 || slot.slotNumber % 9 == 8) continue;
if (slot.slotNumber < 9 || slot.slotNumber > 44 || slot.slotNumber % 9 == 0 || slot.slotNumber % 9 == 8)
continue;
if (item.getUnlocalizedName().contains(colorNeeded)) {
shouldClick.add(slot.slotNumber);
}
Expand Down Expand Up @@ -112,4 +117,24 @@ public void onDrawSlot(GuiContainerEvent.DrawSlotEvent.Pre event) {
}
}

@SubscribeEvent(priority = EventPriority.LOWEST)
public void onTooltip(ItemTooltipEvent event) {
if (!Utils.inDungeons) return;
if (!Skytils.config.selectAllColorTerminalSolver) return;
if (event.toolTip == null) return;

Minecraft mc = Minecraft.getMinecraft();
EntityPlayerSP player = mc.thePlayer;

if (mc.currentScreen instanceof GuiChest) {
ContainerChest chest = (ContainerChest) player.openContainer;
IInventory inv = chest.getLowerChestInventory();
String chestName = inv.getDisplayName().getUnformattedText();

if (chestName.startsWith("Select all the")) {
event.toolTip.clear();
}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,15 @@

import com.google.common.collect.ImmutableList;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.gui.inventory.GuiChest;
import net.minecraft.inventory.ContainerChest;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.util.StringUtils;
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
import skytils.skytilsmod.Skytils;
Expand Down Expand Up @@ -110,4 +114,24 @@ public void onDrawSlot(GuiContainerEvent.DrawSlotEvent.Pre event) {
}
}
}

@SubscribeEvent(priority = EventPriority.LOWEST)
public void onTooltip(ItemTooltipEvent event) {
if (!Utils.inDungeons) return;
if (!Skytils.config.startsWithSequenceTerminalSolver) return;
if (event.toolTip == null) return;

Minecraft mc = Minecraft.getMinecraft();
EntityPlayerSP player = mc.thePlayer;

if (mc.currentScreen instanceof GuiChest) {
ContainerChest chest = (ContainerChest) player.openContainer;
IInventory inv = chest.getLowerChestInventory();
String chestName = inv.getDisplayName().getUnformattedText();

if (chestName.startsWith("What starts with:")) {
event.toolTip.clear();
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package skytils.skytilsmod.features.impl.dungeons.solvers.terminals;

import net.minecraft.client.Minecraft;
import net.minecraft.init.Blocks;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.gui.inventory.GuiChest;
import net.minecraft.inventory.ContainerChest;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.util.StringUtils;
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import skytils.skytilsmod.Skytils;
import skytils.skytilsmod.events.GuiContainerEvent;
Expand Down Expand Up @@ -32,4 +36,23 @@ public void onSlotClick(GuiContainerEvent.SlotClickEvent event) {
}
}
}

@SubscribeEvent(priority = EventPriority.LOWEST)
public void onTooltip(ItemTooltipEvent event) {
if (!Utils.inDungeons) return;
if (event.toolTip == null) return;

Minecraft mc = Minecraft.getMinecraft();
EntityPlayerSP player = mc.thePlayer;

if (mc.currentScreen instanceof GuiChest) {
ContainerChest chest = (ContainerChest) player.openContainer;
IInventory inv = chest.getLowerChestInventory();
String chestName = inv.getDisplayName().getUnformattedText();

if (chestName.equals("Navigate the maze!") || chestName.equals("Correct all the panes!")) {
event.toolTip.clear();
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package skytils.skytilsmod.features.impl.misc;

import com.google.common.collect.ImmutableList;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.gui.inventory.GuiChest;
Expand All @@ -16,10 +15,12 @@
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.play.server.S2APacketParticles;
import net.minecraft.util.*;
import net.minecraft.util.BlockPos;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.EnumParticleTypes;
import net.minecraftforge.client.event.GuiScreenEvent;
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import skytils.skytilsmod.Skytils;
Expand All @@ -36,8 +37,6 @@
import skytils.skytilsmod.utils.graphics.colors.CommonColors;

import java.awt.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
Expand All @@ -60,7 +59,8 @@ public void onGuiDraw(GuiScreenEvent.BackgroundDrawnEvent event) {
ItemStack stack = slot.getStack();
if (stack == null) continue;
NBTTagCompound extraAttr = ItemUtil.getExtraAttributes(stack);
if (extraAttr == null || !extraAttr.hasKey("baseStatBoostPercentage") || extraAttr.hasKey("dungeon_item_level")) continue;
if (extraAttr == null || !extraAttr.hasKey("baseStatBoostPercentage") || extraAttr.hasKey("dungeon_item_level"))
continue;
RenderUtil.drawOnSlot(mc.thePlayer.inventory.getSizeInventory(), slot.xDisplayPosition, slot.yDisplayPosition + 1, new Color(15, 233, 233, 225).getRGB());
}
}
Expand All @@ -85,7 +85,7 @@ public void onCloseWindow(GuiContainerEvent.CloseWindowEvent event) {
ItemStack item = mc.thePlayer.inventory.getItemStack();
NBTTagCompound extraAttr = ItemUtil.getExtraAttributes(item);
if (Skytils.config.protectStarredItems && extraAttr != null) {
if ((item.getDisplayName().contains("✪") || extraAttr.hasKey("dungeon_item_level"))) {
if (extraAttr.hasKey("dungeon_item_level")) {
notifyAndMoveToFreeSlot(event.container);
return;
}
Expand Down Expand Up @@ -113,23 +113,33 @@ public void onSlotClick(GuiContainerEvent.SlotClickEvent event) {
item = salvageItem;
inSalvageGui = true;
}
if ((item.getDisplayName().contains("✪") || extraAttr.hasKey("dungeon_item_level")) && (event.slot.inventory == mc.thePlayer.inventory || inSalvageGui)) {
if (extraAttr.hasKey("dungeon_item_level") && (event.slot.inventory == mc.thePlayer.inventory || inSalvageGui)) {
mc.thePlayer.playSound("note.bass", 1, 0.5f);
mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Skytils has stopped you from salvaging that item!"));
event.setCanceled(true);
return;
}
}
if (!chestName.equals("Large Chest") && !chestName.contains("Auction") && inv.getSizeInventory() == 54 && extraAttr != null) {
ItemStack sellItem = inv.getStackInSlot(49);
if (sellItem != null) {
if ((sellItem.getItem() == Item.getItemFromBlock(Blocks.hopper) && sellItem.getDisplayName().contains("Sell Item")) || ItemUtil.getItemLore(sellItem).stream().anyMatch(s -> s.contains("buyback"))) {
if ((item.getDisplayName().contains("✪") || extraAttr.hasKey("dungeon_item_level")) && (event.slot.inventory == mc.thePlayer.inventory && event.slotId != 49)) {
mc.thePlayer.playSound("note.bass", 1, 0.5f);
mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Skytils has stopped you from selling that item!"));
event.setCanceled(true);
return;
}
}
if (Skytils.config.stopClickingNonSalvageable) {
String itemId = ItemUtil.getSkyBlockItemID(item);
if (chestName.startsWith("Salvage") && extraAttr != null) {
if (!extraAttr.hasKey("baseStatBoostPercentage") && !item.getDisplayName().contains("Salvage") && !item.getDisplayName().contains("Essence")) {
event.setCanceled(true);
if (itemId.contains("BACKPACK") && !itemId.equals("JUMBO_BACKPACK_UPGRADE"))
event.setCanceled(false);
}
}
}
if (!chestName.equals("Large Chest") && !chestName.contains("Auction") && inv.getSizeInventory() == 54 && extraAttr != null) {
ItemStack sellItem = inv.getStackInSlot(49);
if (sellItem != null) {
if ((sellItem.getItem() == Item.getItemFromBlock(Blocks.hopper) && sellItem.getDisplayName().contains("Sell Item")) || ItemUtil.getItemLore(sellItem).stream().anyMatch(s -> s.contains("buyback"))) {
if (extraAttr.hasKey("dungeon_item_level") && (event.slot.inventory == mc.thePlayer.inventory && event.slotId != 49)) {
mc.thePlayer.playSound("note.bass", 1, 0.5f);
mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Skytils has stopped you from selling that item!"));
event.setCanceled(true);
return;
}
}
}
Expand All @@ -140,7 +150,7 @@ public void onSlotClick(GuiContainerEvent.SlotClickEvent event) {
ItemStack item = mc.thePlayer.inventory.getItemStack();
NBTTagCompound extraAttr = ItemUtil.getExtraAttributes(item);
if (Skytils.config.protectStarredItems && extraAttr != null) {
if ((item.getDisplayName().contains("✪") || extraAttr.hasKey("dungeon_item_level"))) {
if (extraAttr.hasKey("dungeon_item_level")) {
notifyAndMoveToFreeSlot(event.container);
event.setCanceled(true);
return;
Expand All @@ -151,7 +161,7 @@ public void onSlotClick(GuiContainerEvent.SlotClickEvent event) {
ItemStack item = event.slot.getStack();
NBTTagCompound extraAttr = ItemUtil.getExtraAttributes(item);
if (Skytils.config.protectStarredItems && extraAttr != null) {
if ((item.getDisplayName().contains("✪") || extraAttr.hasKey("dungeon_item_level"))) {
if (extraAttr.hasKey("dungeon_item_level")) {
mc.thePlayer.playSound("note.bass", 1, 0.5f);
mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Skytils has stopped you from dropping that item!"));
event.setCanceled(true);
Expand Down Expand Up @@ -255,12 +265,12 @@ public void onRenderItemOverlayPost(GuiRenderItemEvent.RenderOverlayEvent.Post e

List<String> lore = ItemUtil.getItemLore(item);

if(!lore.isEmpty()) {
if (!lore.isEmpty()) {
if (Skytils.config.showPetCandies && item.getItem() == Items.skull) {
Pattern candyPattern = Pattern.compile("§a\\((\\d+)/10\\) Pet Candy Used");
for(String line : lore) {
for (String line : lore) {
Matcher candyLineMatcher = candyPattern.matcher(line);
if(candyLineMatcher.matches()) {
if (candyLineMatcher.matches()) {
stackTip = String.valueOf(candyLineMatcher.group(1));
break;
}
Expand All @@ -273,7 +283,7 @@ public void onRenderItemOverlayPost(GuiRenderItemEvent.RenderOverlayEvent.Post e
GlStateManager.disableLighting();
GlStateManager.disableDepth();
GlStateManager.disableBlend();
event.fr.drawStringWithShadow(stackTip, (float)(event.x + 17 - event.fr.getStringWidth(stackTip)), (float)(event.y + 9), 16777215);
event.fr.drawStringWithShadow(stackTip, (float) (event.x + 17 - event.fr.getStringWidth(stackTip)), (float) (event.y + 9), 16777215);
GlStateManager.enableLighting();
GlStateManager.enableDepth();
}
Expand Down Expand Up @@ -308,7 +318,7 @@ public void render() {

GlStateManager.scale(this.getScale(), this.getScale(), 1.0);
mc.fontRendererObj.drawString("\u00a7cSoul Strength: \u00a7a" + bonus, x, y, 0xFFFFFF, true);
GlStateManager.scale(1/this.getScale(), 1/this.getScale(), 1.0F);
GlStateManager.scale(1 / this.getScale(), 1 / this.getScale(), 1.0F);
}
}
}
Expand Down