├── .gitignore ├── README.md ├── pom.xml └── src └── main ├── java └── pene │ └── gc │ └── teammerge │ ├── TeamMergeh.java │ ├── commands │ └── TeamMerge.java │ └── utils │ └── SettingEditor.java └── resources └── plugin.json /.gitignore: -------------------------------------------------------------------------------- 1 | target/ 2 | !.mvn/wrapper/maven-wrapper.jar 3 | !**/src/main/**/target/ 4 | !**/src/test/**/target/ 5 | 6 | ### IntelliJ IDEA ### 7 | .idea/modules.xml 8 | .idea/jarRepositories.xml 9 | .idea/compiler.xml 10 | .idea/libraries/ 11 | *.iws 12 | *.iml 13 | *.ipr 14 | 15 | ### Eclipse ### 16 | .apt_generated 17 | .classpath 18 | .factorypath 19 | .project 20 | .settings 21 | .springBeans 22 | .sts4-cache 23 | 24 | ### NetBeans ### 25 | /nbproject/private/ 26 | /nbbuild/ 27 | /dist/ 28 | /nbdist/ 29 | /.nb-gradle/ 30 | build/ 31 | !**/src/main/**/build/ 32 | !**/src/test/**/build/ 33 | 34 | ### VS Code ### 35 | .vscode/ 36 | 37 | ### Mac OS ### 38 | .DS_Store -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TeamMerge plugin 2 | ### Allows you to quickly make massive teams just by setting them as other party 3 | 4 | 5 | https://user-images.githubusercontent.com/81880849/181936815-bb72f3b6-d05f-40a0-a020-64f204ba98ba.mp4 6 | 7 | 8 | ## Usage: 9 | 1. Make party that you want in normal party slots (you can use all 4 teams, party order matters) 10 | 2. Use /tm or /party in in-game chat with server (or without "/" in console) 11 | 12 | **Optional:** 13 | Is you want to change something in current big party then go to party setup and click on quick setup, it should allow you to change characters and their order just by clicking on both of them and clicking them in reverse order. 14 | 15 | ## FAQ 16 | 17 | 1. How to install plugin? 18 | - Add the newest jar file from [here](https://github.com/Penelopeep/TeamMerge/releases), and put it in **GrasscutterFolder/Plugins** (make one if you don't have) 19 | 2. Plugin says that it can't change server settings: 20 | - Well, I added this as a safety measure, but I have no clue what could cause this. Just open **config.json**, press **ctrl+f** and search for **singlePlayerTeam** 21 | 3. After changing config.json I still can't make bigger parties 22 | - Dm me on discord **Penelopeep#7963** since in this case it will be probably error which don't occur on my pc. 23 | 4. Just use /team add 24 | - I'm lazy and I thought it's cooler, also it's easier because /team requires avatarId but plugin just takes it from game 25 | 5. Your error handling sucks 26 | - You're right, if you know how to make proper error handling or how to get data from **config.json** then make pull request or dm me on discord **Penelopeep#7963** 27 | 28 | ## Credits: 29 | 30 | - Grasscutter team for making PluginTemplate and Grasscutter itself 31 | - Me for everything else 32 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | pene.gc.teammerge 8 | TeamMerge 9 | 1 10 | 11 | 12 | 17 13 | 17 14 | 15 | 16 | 17 | 18 | xyz.grasscutters 19 | grasscutter 20 | 1.7.2 21 | system 22 | ${env.USERPROFILE}\Downloads\grasscutter-1.7.2.jar 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/main/java/pene/gc/teammerge/TeamMergeh.java: -------------------------------------------------------------------------------- 1 | package pene.gc.teammerge; 2 | 3 | import emu.grasscutter.plugin.Plugin; 4 | 5 | public final class TeamMergeh extends Plugin { 6 | private static TeamMergeh instance; 7 | public static TeamMergeh getInstance() { 8 | return instance; 9 | } 10 | @Override public void onLoad() { 11 | // Set the plugin instance. 12 | instance = this; 13 | } 14 | @Override public void onEnable() { 15 | 16 | // Register commands. 17 | this.getHandle().registerCommand(new pene.gc.teammerge.commands.TeamMerge()); 18 | 19 | // Log a plugin status message. 20 | this.getLogger().info("The TeamMerge plugin has been enabled."); 21 | } 22 | 23 | @Override public void onDisable() { 24 | // Log a plugin status message. 25 | this.getLogger().info("The TeamMerge plugin has been disabled."); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/pene/gc/teammerge/commands/TeamMerge.java: -------------------------------------------------------------------------------- 1 | package pene.gc.teammerge.commands; 2 | 3 | import emu.grasscutter.Grasscutter; 4 | import emu.grasscutter.command.Command; 5 | import emu.grasscutter.command.CommandHandler; 6 | import emu.grasscutter.game.avatar.Avatar; 7 | import emu.grasscutter.game.entity.EntityAvatar; 8 | import emu.grasscutter.game.player.Player; 9 | import pene.gc.teammerge.utils.SettingEditor; 10 | 11 | import java.util.List; 12 | 13 | @Command(label = "TeamMerge", aliases = {"party", "tm"}) 14 | public final class TeamMerge implements CommandHandler { 15 | public int getTeamSize(Player targetPlayer){ 16 | int TeamSize; 17 | if (targetPlayer.isInMultiplayer()) { 18 | TeamSize = Grasscutter.getConfig().server.game.gameOptions.avatarLimits.multiplayerTeam; 19 | } 20 | else { 21 | TeamSize = Grasscutter.getConfig().server.game.gameOptions.avatarLimits.singlePlayerTeam; 22 | } 23 | return TeamSize; 24 | } 25 | @Override 26 | public void execute(Player sender,Player targetPlayer, List args) { 27 | int TeamSize = getTeamSize(targetPlayer); 28 | int OldTeamSize = TeamSize; //I'll use it someday 29 | if (TeamSize==2 || TeamSize==4){ 30 | SettingEditor.ChangeTeamSize(targetPlayer,40); //Size 40 since there's now maximum of 10 teams 31 | TeamSize=getTeamSize(targetPlayer); 32 | if (TeamSize==OldTeamSize){ 33 | if(sender!=null){ 34 | CommandHandler.sendMessage(sender,"TeamMerge couldn't change server setting"); 35 | } else { 36 | Grasscutter.getLogger().error("TeamMerge couldn't change server setting"); 37 | } 38 | } 39 | } 40 | for (int i = 1; i <= targetPlayer.getTeamManager().getTeams().size(); i++) { 41 | try { 42 | List tiAvatars = targetPlayer.getTeamManager().getTeams().get(i).getAvatars(); 43 | for (int avatarid : tiAvatars) { 44 | int addChar = 0; 45 | List entityAvatarList = targetPlayer.getTeamManager().getActiveTeam(); 46 | for (EntityAvatar entityAvatar : entityAvatarList) { 47 | if (entityAvatar.getAvatar().getAvatarId() == avatarid) { 48 | addChar += 1; 49 | } 50 | } 51 | if (addChar == 0) { 52 | Avatar avatar = targetPlayer.getAvatars().getAvatarById(avatarid); 53 | targetPlayer.getTeamManager().addAvatarToCurrentTeam(avatar); 54 | } 55 | } 56 | } catch (Exception e) { 57 | e.printStackTrace(); 58 | } 59 | } 60 | if (sender != null) { 61 | if (targetPlayer.getTeamManager().getCurrentTeamInfo().size() == TeamSize) { 62 | CommandHandler.sendMessage(targetPlayer, "Characters couldn't be added to party, probably server config isn't changed"); 63 | } else if (targetPlayer.getTeamManager().getCurrentTeamInfo().size() < TeamSize) { 64 | CommandHandler.sendMessage(targetPlayer, "Characters added to party"); 65 | } else { 66 | CommandHandler.sendMessage(targetPlayer, "Unknown error, report this on plugin github/dm Penelopeep#7963"); 67 | } 68 | } 69 | else{ 70 | if (targetPlayer.getTeamManager().getCurrentTeamInfo().size() == TeamSize) { 71 | Grasscutter.getLogger().warn("Characters couldn't be added to party, probably server config isn't changed"); 72 | } else if (targetPlayer.getTeamManager().getCurrentTeamInfo().size() < TeamSize) { 73 | Grasscutter.getLogger().info("Characters added to party"); 74 | } else { 75 | Grasscutter.getLogger().error("Unknown error, report this on plugin github/dm Penelopeep#7963"); 76 | } 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/main/java/pene/gc/teammerge/utils/SettingEditor.java: -------------------------------------------------------------------------------- 1 | package pene.gc.teammerge.utils; 2 | 3 | import emu.grasscutter.Grasscutter; 4 | import emu.grasscutter.config.ConfigContainer; 5 | import emu.grasscutter.game.player.Player; 6 | 7 | public class SettingEditor { 8 | public static void ChangeTeamSize(Player targetplayer, int size){ 9 | ConfigContainer newConfig = Grasscutter.getConfig(); 10 | if (targetplayer.isInMultiplayer()){ 11 | if (Grasscutter.getConfig().server.game.gameOptions.avatarLimits.multiplayerTeam