Merge pull request #617 from S-B99/feature/master

Update combat improvements
This commit is contained in:
Bella Who 2020-03-27 22:19:44 +00:00 committed by GitHub
commit b4b4678933
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
23 changed files with 144 additions and 145 deletions

View File

@ -8,7 +8,7 @@ import me.zeroeightsix.kami.module.modules.misc.DiscordSettings;
import static me.zeroeightsix.kami.KamiMod.APP_ID;
/***
/**
* @author S-B99
* Updated by S-B99 on 13/01/20
*/

View File

@ -17,13 +17,6 @@ import me.zeroeightsix.kami.gui.rgui.util.ContainerHelper;
import me.zeroeightsix.kami.gui.rgui.util.Docking;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.module.ModuleManager;
import me.zeroeightsix.kami.module.modules.capes.Capes;
import me.zeroeightsix.kami.module.modules.chat.CustomChat;
import me.zeroeightsix.kami.module.modules.gui.CleanGUI;
import me.zeroeightsix.kami.module.modules.gui.PrefixChat;
import me.zeroeightsix.kami.module.modules.hidden.FixGui;
import me.zeroeightsix.kami.module.modules.misc.DiscordSettings;
import me.zeroeightsix.kami.module.modules.render.TabFriends;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import me.zeroeightsix.kami.setting.SettingsRegister;
@ -199,31 +192,7 @@ public class KamiMod {
try { // load modules that are on by default // autoenable
ModuleManager.getModuleByName("InfoOverlay").setEnabled(true);
ModuleManager.getModuleByName("InventoryViewer").setEnabled(true);
ModuleManager.getModuleByName("ActiveModules").setEnabled(true);
if (((Capes) ModuleManager.getModuleByName("Capes")).startupGlobal.getValue()) {
ModuleManager.getModuleByName("Capes").setEnabled(true);
}
if (((DiscordSettings) ModuleManager.getModuleByName("DiscordSettings")).startupGlobal.getValue()) {
ModuleManager.getModuleByName("DiscordSettings").setEnabled(true);
}
if (((FixGui) ModuleManager.getModuleByName("Hidden:FixGui")).shouldAutoEnable.getValue()) {
ModuleManager.getModuleByName("Hidden:FixGui").setEnabled(true);
}
if (((TabFriends) ModuleManager.getModuleByName("TabFriends")).startupGlobal.getValue()) {
ModuleManager.getModuleByName("TabFriends").setEnabled(true);
}
if (((CustomChat) ModuleManager.getModuleByName("CustomChat")).startupGlobal.getValue()) {
ModuleManager.getModuleByName("CustomChat").setEnabled(true);
}
if (((CleanGUI) ModuleManager.getModuleByName("CleanGUI")).startupGlobal.getValue()) {
ModuleManager.getModuleByName("CleanGUI").setEnabled(true);
}
if (((PrefixChat) ModuleManager.getModuleByName("PrefixChat")).startupGlobal.getValue()) {
ModuleManager.getModuleByName("PrefixChat").setEnabled(true);
}
ModuleManager.getModuleByName("Hidden:RunConfig").setEnabled(true);
}
catch (NullPointerException e) {
KamiMod.log.error("NPE in loading always enabled modules\n");

View File

@ -63,10 +63,6 @@ public abstract class Command {
ModuleManager.getModuleByName(moduleName).enable();
}
public static void sendAutoDisableMessage(String moduleName, boolean startup) {
if (startup) sendWarningMessage("Note: The " + moduleName + " module has automatic startup enabled. If you want to keep it disabled, disable the automatic startup setting");
}
public static void sendRawChatMessage(String message) {
if (Minecraft.getMinecraft().player != null) {
Wrapper.getPlayer().sendMessage(new ChatMessage(message));

View File

@ -9,6 +9,8 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import static me.zeroeightsix.kami.util.CommandUtil.runAliases;
public class CommandManager {
private ArrayList<Command> commands;
@ -43,7 +45,11 @@ public class CommandManager {
}
for (Command c : commands) {
if (c.getLabel().equalsIgnoreCase(label) || c.getAliases().stream().anyMatch(alias -> alias.equalsIgnoreCase(label))) {
if (c.getLabel().equalsIgnoreCase(label)) {
c.call(parts);
runAliases(c);
return;
} else if (c.getAliases().stream().anyMatch(alias -> alias.equalsIgnoreCase(label))) {
c.call(parts);
return;
}

View File

@ -8,6 +8,7 @@ import me.zeroeightsix.kami.gui.UIRenderer;
import me.zeroeightsix.kami.gui.kami.KamiGUI;
import me.zeroeightsix.kami.gui.rgui.component.container.use.Frame;
import me.zeroeightsix.kami.module.ModuleManager;
import me.zeroeightsix.kami.module.modules.gui.CommandConfig;
import me.zeroeightsix.kami.module.modules.render.BossStack;
import me.zeroeightsix.kami.util.KamiTessellator;
import me.zeroeightsix.kami.util.Wrapper;
@ -109,7 +110,7 @@ public class ForgeEventProcessor {
@SubscribeEvent(priority = EventPriority.NORMAL, receiveCanceled = true)
public void onKeyInput(InputEvent.KeyInputEvent event) {
if (!Keyboard.getEventKeyState()) return;
if (ModuleManager.isModuleEnabled("PrefixChat") && ("" + Keyboard.getEventCharacter()).equalsIgnoreCase(Command.getCommandPrefix()) && !(Minecraft.getMinecraft().player.isSneaking())) {
if (((CommandConfig) ModuleManager.getModuleByName("CommandConfig")).prefixChat.getValue() && ("" + Keyboard.getEventCharacter()).equalsIgnoreCase(Command.getCommandPrefix()) && !(Minecraft.getMinecraft().player.isSneaking())) {
Minecraft.getMinecraft().displayGuiScreen(new GuiChat(Command.getCommandPrefix()));
} else {
ModuleManager.onBind(Keyboard.getEventKey());

View File

@ -8,7 +8,7 @@ import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
/***
/**
* @author 3arthqu4ke
* Updated by S-B99 on 27/12/19
*/

View File

@ -2,11 +2,10 @@ package me.zeroeightsix.kami.module.modules.capes;
import com.google.gson.Gson;
import me.zeroeightsix.kami.KamiMod;
import me.zeroeightsix.kami.command.Command;
import me.zeroeightsix.kami.util.Wrapper;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.util.Wrapper;
import net.minecraft.client.entity.AbstractClientPlayer;
import net.minecraft.client.renderer.IImageBuffer;
import net.minecraft.client.renderer.ThreadDownloadImageData;
@ -22,7 +21,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/***
/**
* @author Crystallinqq
* Updated by S-B99 on 20/12/19
* Updated by 20kdc on 17/02/20 - changed implementation method, made a module again, made async
@ -30,7 +29,6 @@ import java.util.Map;
*/
@Module.Info(name = "Capes", category = Module.Category.GUI, description = "Controls the display of KAMI Blue capes", showOnArray = Module.ShowOnArray.OFF)
public class Capes extends Module {
public Setting<Boolean> startupGlobal = register(Settings.b("Enable Automatically", true));
// This allows controlling if other capes (Mojang, OptiFine) should override the KAMI Blue cape.
public Setting<Boolean> overrideOtherCapes = Settings.b("Override Mojang / Opti capes", false);
@ -153,6 +151,4 @@ public class Capes extends Module {
textureManager.loadTexture(location, textureCape);
}
}
public void onDisable() { Command.sendAutoDisableMessage(getName(), startupGlobal.getValue()); }
}

View File

@ -17,7 +17,6 @@ import static me.zeroeightsix.kami.KamiMod.*;
*/
@Module.Info(name = "CustomChat", category = Module.Category.CHAT, description = "Add a custom suffix to the end of your message!", showOnArray = Module.ShowOnArray.OFF)
public class CustomChat extends Module {
public Setting<Boolean> startupGlobal = register(Settings.b("Enable Automatically", true));
public Setting<TextMode> textMode = register(Settings.e("Message", TextMode.ON_TOP));
private Setting<DecoMode> decoMode = register(Settings.e("Separator", DecoMode.NONE));
private Setting<Boolean> commands = register(Settings.b("Commands", false));
@ -76,6 +75,4 @@ public class CustomChat extends Module {
startTime = System.currentTimeMillis();
}
}
public void onDisable() { Command.sendAutoDisableMessage(getName(), startupGlobal.getValue()); }
}

View File

@ -8,7 +8,7 @@ import me.zeroeightsix.kami.util.Friends;
import net.minecraft.client.entity.EntityOtherPlayerMP;
import net.minecraft.entity.Entity;
/***
/**
* @author Sasha
*/
@Module.Info(name = "AntiFriendHit", description = "Don't hit your friends", category = Module.Category.COMBAT, alwaysListening = true)

View File

@ -1,43 +0,0 @@
package me.zeroeightsix.kami.module.modules.combat;
import java.util.Comparator;
import me.zeroeightsix.kami.command.Command;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import net.minecraft.tileentity.TileEntityBed;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.math.Vec3d;
@Module.Info(name = "BedAura", category = Module.Category.COMBAT, description = "Automatically right clicks beds in range")
public class BedAura extends Module {
private Setting<Integer> waitTick = register(Settings.i("Tick Delay", 10));
private Setting<Double> range = register(Settings.d("Hit Range", 4.0D));
private int waitCounter;
public void onUpdate() {
if (mc.player == null) return;
if (mc.player.dimension != 0) {
if (waitTick.getValue() > 0) {
if (waitCounter < waitTick.getValue()) {
++waitCounter;
return;
}
waitCounter = 0;
}
mc.world.loadedTileEntityList.stream()
.filter((e) -> e instanceof TileEntityBed)
.filter((e) -> mc.player.getPosition().getDistance(e.getPos().x, e.getPos().y, e.getPos().z) <= range.getValue())
.map((entity) -> (TileEntityBed) entity)
.min(Comparator.comparing((e) -> mc.player.getPosition().getDistance(e.getPos().x, e.getPos().y, e.getPos().z)))
.ifPresent(bed -> mc.playerController.processRightClickBlock(mc.player, mc.world, bed.getPos(), EnumFacing.UP, new Vec3d(bed.getPos().getX(), bed.getPos().getY(), bed.getPos().getZ()), EnumHand.MAIN_HAND));
} else {
Command.sendErrorMessage(getChatName() + "Exploding beds only works in the nether and in the end, disabling!");
disable();
}
}
}

View File

@ -9,28 +9,24 @@ import net.minecraftforge.event.entity.player.AttackEntityEvent;
import java.util.function.Predicate;
/***
/**
* @author S-B99
*/
@Module.Info(name = "Criticals", category = Module.Category.COMBAT, description = "Always do critical attacks")
public class Criticals extends Module {
@EventHandler
private Listener<AttackEntityEvent> attackEntityEventListener;
public Criticals() {
this.attackEntityEventListener = new Listener<AttackEntityEvent>(event -> {
if (!Criticals.mc.player.isInWater() && !Criticals.mc.player.isInLava()) {
if (Criticals.mc.player.onGround) {
Criticals.mc.player.connection.sendPacket((Packet) new CPacketPlayer.Position(Criticals.mc.player.posX, Criticals.mc.player.posY + 0.1625, Criticals.mc.player.posZ, false));
Criticals.mc.player.connection.sendPacket((Packet) new CPacketPlayer.Position(Criticals.mc.player.posX, Criticals.mc.player.posY, Criticals.mc.player.posZ, false));
Criticals.mc.player.connection.sendPacket((Packet) new CPacketPlayer.Position(Criticals.mc.player.posX, Criticals.mc.player.posY + 4.0E-6, Criticals.mc.player.posZ, false));
Criticals.mc.player.connection.sendPacket((Packet) new CPacketPlayer.Position(Criticals.mc.player.posX, Criticals.mc.player.posY, Criticals.mc.player.posZ, false));
Criticals.mc.player.connection.sendPacket((Packet) new CPacketPlayer.Position(Criticals.mc.player.posX, Criticals.mc.player.posY + 1.0E-6, Criticals.mc.player.posZ, false));
Criticals.mc.player.connection.sendPacket((Packet) new CPacketPlayer.Position(Criticals.mc.player.posX, Criticals.mc.player.posY, Criticals.mc.player.posZ, false));
Criticals.mc.player.connection.sendPacket((Packet) new CPacketPlayer());
Criticals.mc.player.onCriticalHit(event.getTarget());
}
private Listener<AttackEntityEvent> attackEntityEventListener = new Listener<>(event -> {
if (!mc.player.isInWater() && !mc.player.isInLava()) {
if (mc.player.onGround) {
mc.player.connection.sendPacket(new CPacketPlayer.Position(mc.player.posX, mc.player.posY + 0.1625, mc.player.posZ, false));
mc.player.connection.sendPacket(new CPacketPlayer.Position(mc.player.posX, mc.player.posY, mc.player.posZ, false));
mc.player.connection.sendPacket(new CPacketPlayer.Position(mc.player.posX, mc.player.posY + 4.0E-6, mc.player.posZ, false));
mc.player.connection.sendPacket(new CPacketPlayer.Position(mc.player.posX, mc.player.posY, mc.player.posZ, false));
mc.player.connection.sendPacket(new CPacketPlayer.Position(mc.player.posX, mc.player.posY + 1.0E-6, mc.player.posZ, false));
mc.player.connection.sendPacket(new CPacketPlayer.Position(mc.player.posX, mc.player.posY, mc.player.posZ, false));
mc.player.connection.sendPacket(new CPacketPlayer());
mc.player.onCriticalHit(event.getTarget());
}
}, (Predicate<AttackEntityEvent>[]) new Predicate[0]);
}
}
});
}

View File

@ -1,17 +1,15 @@
package me.zeroeightsix.kami.module.modules.gui;
import me.zeroeightsix.kami.command.Command;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
/***
/**
* @author S-B99
* Updated by S-B99 on 27/12/19
*/
@Module.Info(name = "CleanGUI", category = Module.Category.GUI, showOnArray = Module.ShowOnArray.OFF, description = "Modifies parts of the GUI to be transparent")
public class CleanGUI extends Module {
public Setting<Boolean> startupGlobal = register(Settings.b("Enable Automatically", true));
public Setting<Boolean> inventoryGlobal = register(Settings.b("Inventory", false));
public static Setting<Boolean> chatGlobal = Settings.b("Chat", true);
@ -25,6 +23,4 @@ public class CleanGUI extends Module {
public static boolean enabled() {
return INSTANCE.isEnabled();
}
public void onDisable() { Command.sendAutoDisableMessage(getName(), startupGlobal.getValue()); }
}

View File

@ -0,0 +1,16 @@
package me.zeroeightsix.kami.module.modules.gui;
import me.zeroeightsix.kami.command.Command;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
/**
* @author S-B99
*/
@Module.Info(name = "CommandConfig", category = Module.Category.GUI, description = "Configures options related to commands", showOnArray = Module.ShowOnArray.OFF)
public class CommandConfig extends Module {
public Setting<Boolean> aliasInfo = register(Settings.b("Alias Info", true));
public Setting<Boolean> prefixChat = register(Settings.b("PrefixChat", true));
public void onDisable() { Command.sendDisableMessage(getName()); }
}

View File

@ -1,13 +0,0 @@
package me.zeroeightsix.kami.module.modules.gui;
import me.zeroeightsix.kami.command.Command;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
@Module.Info(name = "PrefixChat", category = Module.Category.GUI, description = "Opens chat with prefix inside when prefix is pressed.", showOnArray = Module.ShowOnArray.OFF)
public class PrefixChat extends Module {
public Setting<Boolean> startupGlobal = register(Settings.b("Enable Automatically", true));
public void onDisable() { Command.sendAutoDisableMessage(getName(), startupGlobal.getValue()); }
}

View File

@ -4,7 +4,7 @@ import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
/***
/**
* @author S-B99
* Created by S-B99 on 20/12/19
* Updated by S-B99 on 22/12/19

View File

@ -0,0 +1,48 @@
package me.zeroeightsix.kami.module.modules.hidden;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.module.ModuleManager;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
/**
* @author S-B99
* Horribly designed class for uh, running things only once.
*/
@Module.Info(name = "Hidden:RunConfig", category = Module.Category.HIDDEN, showOnArray = Module.ShowOnArray.OFF, description = "Default manager for first runs")
public class RunConfig extends Module {
private Setting<Boolean> hasRunCapes = register(Settings.b("Capes", false));
private Setting<Boolean> hasRunDiscordSettings = register(Settings.b("DiscordSettings", false));
private Setting<Boolean> hasRunFixGui = register(Settings.b("FixGui", false));
private Setting<Boolean> hasRunTabFriends = register(Settings.b("TabFriends", false));
private Setting<Boolean> hasRunCustomChat = register(Settings.b("CustomChat", false));
public void onEnable() {
ModuleManager.getModuleByName("InfoOverlay").setEnabled(true);
ModuleManager.getModuleByName("ActiveModules").setEnabled(true);
ModuleManager.getModuleByName("InventoryViewer").setEnabled(true);
ModuleManager.getModuleByName("CommandConfig").setEnabled(true);
if (!hasRunCapes.getValue()) {
ModuleManager.getModuleByName("Capes").setEnabled(true);
hasRunCapes.setValue(true);
}
if (!hasRunDiscordSettings.getValue()) {
ModuleManager.getModuleByName("DiscordSettings").setEnabled(true);
hasRunDiscordSettings.setValue(true);
}
if (!hasRunFixGui.getValue()) {
ModuleManager.getModuleByName("Hidden:FixGui").setEnabled(true);
hasRunFixGui.setValue(true);
}
if (!hasRunTabFriends.getValue()) {
ModuleManager.getModuleByName("TabFriends").setEnabled(true);
hasRunTabFriends.setValue(true);
}
if (!hasRunCustomChat.getValue()) {
ModuleManager.getModuleByName("CustomChat").setEnabled(true);
hasRunCustomChat.setValue(true);
}
disable();
}
}

View File

@ -14,7 +14,7 @@ import io.netty.buffer.Unpooled;
import net.minecraft.network.PacketBuffer;
import net.minecraft.network.play.client.CPacketCustomPayload;
/***
/**
* Created by 0x2E | PretendingToCode
*/
@Module.Info(name = "BeaconSelector", category = Module.Category.MISC, description = "Choose any of the 5 beacon effects regardless of beacon base height")

View File

@ -15,8 +15,6 @@ import static me.zeroeightsix.kami.util.InfoCalculator.playerDimension;
*/
@Module.Info(name = "DiscordSettings", category = Module.Category.MISC, description = "Discord Rich Presence")
public class DiscordSettings extends Module {
public Setting<Boolean> startupGlobal = register(Settings.b("Enable Automatically", true));
public Setting<Boolean> coordsConfirm = register(Settings.b("Coords Confirm", false));
public Setting<LineInfo> line1Setting = register(Settings.e("Line 1 Left", LineInfo.VERSION)); // details left
public Setting<LineInfo> line3Setting = register(Settings.e("Line 1 Right", LineInfo.USERNAME)); // details right
@ -71,6 +69,4 @@ public class DiscordSettings extends Module {
startTime = System.currentTimeMillis();
}
}
public void onDisable() { Command.sendAutoDisableMessage(getName(), startupGlobal.getValue()); }
}

View File

@ -7,7 +7,7 @@ import me.zeroeightsix.kami.setting.Settings;
import net.minecraft.client.Minecraft;
import net.minecraft.world.GameType;
/***
/**
* Created by @S-B99 on 20/11/19
* Yes, this is 100% original code. Go away
*/

View File

@ -4,18 +4,33 @@ import me.zero.alpine.listener.EventHandler;
import me.zero.alpine.listener.Listener;
import me.zeroeightsix.kami.event.events.PacketEvent;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import net.minecraft.network.play.client.CPacketEntityAction;
import net.minecraft.network.play.client.CPacketPlayer;
import static net.minecraft.network.play.client.CPacketEntityAction.Action.START_SPRINTING;
import static net.minecraft.network.play.client.CPacketEntityAction.Action.STOP_SPRINTING;
/**
* Created by 086 on 8/04/2018.
* Movement taken from Seppuku
* https://github.com/seppukudevelopment/seppuku/blob/005e2da/src/main/java/me/rigamortis/seppuku/impl/module/player/NoHungerModule.java
*/
@Module.Info(name = "AntiHunger", category = Module.Category.MOVEMENT, description = "Reduces hunger lost when moving around")
public class AntiHunger extends Module {
private Setting<Boolean> cancelMovementState = register(Settings.b("Cancel Movement State", true));
@EventHandler
public Listener<PacketEvent.Send> packetListener = new Listener<>(event -> {
if (event.getPacket() instanceof CPacketEntityAction) {
final CPacketEntityAction packet = (CPacketEntityAction) event.getPacket();
if (cancelMovementState.getValue() && (packet.getAction() == START_SPRINTING || packet.getAction() == STOP_SPRINTING)) {
event.cancel();
}
}
if (event.getPacket() instanceof CPacketPlayer) {
((CPacketPlayer) event.getPacket()).onGround = false;
((CPacketPlayer) event.getPacket()).onGround = mc.player.fallDistance > 0 || mc.playerController.isHittingBlock;
}
});

View File

@ -1,17 +1,13 @@
package me.zeroeightsix.kami.module.modules.render;
import me.zeroeightsix.kami.KamiMod;
import me.zeroeightsix.kami.command.Command;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import me.zeroeightsix.kami.util.Friends;
import net.minecraft.client.network.NetworkPlayerInfo;
import net.minecraft.scoreboard.ScorePlayerTeam;
@Module.Info(name = "TabFriends", description = "Highlights friends in the tab menu", category = Module.Category.GUI, showOnArray = Module.ShowOnArray.OFF)
public class TabFriends extends Module {
public Setting<Boolean> startupGlobal = register(Settings.b("Enable Automatically", true));
public static TabFriends INSTANCE;
@ -24,6 +20,4 @@ public class TabFriends extends Module {
if (Friends.isFriend(dname)) return String.format("%sa%s", KamiMod.colour, dname);
return dname;
}
public void onDisable() { Command.sendAutoDisableMessage(getName(), startupGlobal.getValue()); }
}

View File

@ -0,0 +1,29 @@
package me.zeroeightsix.kami.util;
import me.zeroeightsix.kami.command.Command;
import me.zeroeightsix.kami.module.ModuleManager;
import me.zeroeightsix.kami.module.modules.gui.CommandConfig;
/**
* @author S-B99
*/
public class CommandUtil {
public static void runAliases(Command command) {
if (!((CommandConfig) ModuleManager.getModuleByName("CommandConfig")).aliasInfo.getValue()) return;
int amount = command.getAliases().size();
if (amount > 0) {
Command.sendChatMessage("'" + command.getLabel() + "' has " + grammar1(amount) + "alias" + grammar2(amount));
Command.sendChatMessage(command.getAliases().toString());
}
}
private static String grammar1(int amount) {
if (amount == 1) return "an ";
return amount + " ";
}
private static String grammar2(int amount) {
if (amount == 1) return "!";
return "es!";
}
}

View File

@ -7,7 +7,7 @@ import javax.net.ssl.HttpsURLConnection;
import java.io.InputStreamReader;
import java.net.URL;
/***
/**
* @author S-B99
*/
public class RichPresence {