Skip to content

Commit 6a24c03

Browse files
committed
adds role commands and system
1 parent d4c4b25 commit 6a24c03

File tree

10 files changed

+278
-6
lines changed

10 files changed

+278
-6
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,4 @@ forge*changelog.txt
2626

2727
# Libs directory
2828
/libs
29+
mcmodsrepo

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ To report a bug, please make an issue on this repository or message `Noojuno#546
2121
- Download More Player Models for 1.12.2 from [here](https://www.curseforge.com/minecraft/mc-mods/more-player-models) and rename the jar to `moreplayermodels.jar`. Put the jar in a folder called `libs` in the projects root directory.
2222
- Follow Minecraft Forges instructions on building a mod.
2323

24+
## Commands
25+
- `/setrole <player> <index> <role>`
26+
- `/addrole <player> <role>`
27+
- `/removerole <player> <role}|ndex>`
28+
2429
## To-do:
2530
- [ ] Character role system
2631
- A role should have a name and a list of commands to run when selected (so permissions, etc can be given)

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ apply plugin: 'net.minecraftforge.gradle'
2222
apply plugin: 'eclipse'
2323
apply plugin: 'maven-publish'
2424

25-
version = '1.0'
25+
version = '004'
2626
group = 'co.runed.multicharacter' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
2727
archivesBaseName = 'multicharacter'
2828

src/main/java/co/runed/multicharacter/MultiCharacterMod.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,17 @@
33
import co.runed.multicharacter.addons.minecraft.MinecraftAddon;
44
import co.runed.multicharacter.api.MultiCharacterAPI;
55
import co.runed.multicharacter.character.CharacterManager;
6+
import co.runed.multicharacter.commands.CommandAddRole;
7+
import co.runed.multicharacter.commands.CommandRemoveRole;
8+
import co.runed.multicharacter.commands.CommandSetRole;
69
import co.runed.multicharacter.proxy.CommonProxy;
710
import net.minecraftforge.fml.common.Mod;
811
import net.minecraftforge.fml.common.Mod.EventHandler;
912
import net.minecraftforge.fml.common.SidedProxy;
1013
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
1114
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
1215
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
16+
import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
1317
import org.apache.logging.log4j.Logger;
1418

1519
@Mod(modid = MultiCharacterMod.MODID, name = MultiCharacterMod.NAME, version = MultiCharacterMod.VERSION, dependencies = MultiCharacterMod.DEPENDENCIES, useMetadata = true)
@@ -56,6 +60,14 @@ public void postInit(FMLPostInitializationEvent event)
5660
proxy.postInit();
5761
}
5862

63+
@EventHandler
64+
public void serverStart(FMLServerStartingEvent event)
65+
{
66+
event.registerServerCommand(new CommandSetRole());
67+
event.registerServerCommand(new CommandRemoveRole());
68+
event.registerServerCommand(new CommandAddRole());
69+
}
70+
5971
public static MultiCharacterMod getInstance()
6072
{
6173
return instance;

src/main/java/co/runed/multicharacter/character/Character.java

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
package co.runed.multicharacter.character;
22

33
import net.minecraft.nbt.NBTTagCompound;
4+
import net.minecraft.nbt.NBTTagList;
5+
import net.minecraft.nbt.NBTTagString;
6+
import net.minecraftforge.common.util.Constants;
47
import net.minecraftforge.common.util.INBTSerializable;
58

9+
import java.util.ArrayList;
10+
import java.util.List;
611
import java.util.UUID;
712

813
public class Character implements INBTSerializable<NBTTagCompound>
914
{
1015
private UUID uniqueId = UUID.randomUUID();
1116
private String name;
17+
private List<String> roles = new ArrayList<>();
1218
private NBTTagCompound nbt = new NBTTagCompound();
1319

1420
public Character()
@@ -41,6 +47,75 @@ public void setName(String name)
4147
this.name = name;
4248
}
4349

50+
public void addRole(String role)
51+
{
52+
this.roles.add(role);
53+
}
54+
55+
public void setRole(int index, String role)
56+
{
57+
if(index <= this.roles.size()) {
58+
this.roles.set(index, role);
59+
return;
60+
}
61+
62+
for (int i = 0; i < index + 1; i++)
63+
{
64+
if (index >= this.roles.size() && i < index)
65+
{
66+
this.roles.add("");
67+
}
68+
69+
if (i == index)
70+
{
71+
this.roles.set(i, role);
72+
return;
73+
}
74+
}
75+
}
76+
77+
public boolean removeRole(int index)
78+
{
79+
if (index < this.roles.size())
80+
{
81+
this.roles.remove(index);
82+
return true;
83+
}
84+
85+
return false;
86+
}
87+
88+
public boolean removeRole(String role)
89+
{
90+
for (int i = 0; i < this.roles.size(); i++)
91+
{
92+
String r = this.roles.get(i);
93+
94+
if (r.equals(role))
95+
{
96+
this.roles.remove(i);
97+
return true;
98+
}
99+
}
100+
101+
return false;
102+
}
103+
104+
public boolean hasRole(String role)
105+
{
106+
return this.roles.contains(role);
107+
}
108+
109+
public void setRoles(List<String> roles)
110+
{
111+
this.roles = roles;
112+
}
113+
114+
public List<String> getRoles()
115+
{
116+
return roles;
117+
}
118+
44119
public NBTTagCompound getNbt()
45120
{
46121
return this.nbt;
@@ -59,6 +134,15 @@ public NBTTagCompound serializeNBT()
59134
tag.setString("name", this.getName());
60135
tag.setTag("nbt", this.nbt);
61136

137+
NBTTagList roleList = new NBTTagList();
138+
139+
for (String role : this.roles)
140+
{
141+
roleList.appendTag(new NBTTagString(role));
142+
}
143+
144+
tag.setTag("roles", roleList);
145+
62146
return tag;
63147
}
64148

@@ -68,6 +152,18 @@ public void deserializeNBT(NBTTagCompound nbt)
68152
this.setUniqueId(nbt.getUniqueId("uuid"));
69153
this.setName(nbt.getString("name"));
70154

155+
if (nbt.hasKey("roles"))
156+
{
157+
NBTTagList roleList = nbt.getTagList("roles", Constants.NBT.TAG_STRING);
158+
159+
for (int i = 0; i < roleList.tagCount(); i++)
160+
{
161+
String role = roleList.getStringTagAt(i);
162+
163+
this.addRole(role);
164+
}
165+
}
166+
71167
this.nbt = nbt.getCompoundTag("nbt");
72168
}
73169
}

src/main/java/co/runed/multicharacter/client/gui/GuiCharacterListEntry.java

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,44 @@
44
import net.minecraft.client.Minecraft;
55
import net.minecraft.client.gui.GuiButton;
66
import net.minecraft.client.gui.GuiListExtended;
7+
import net.minecraft.util.text.TextFormatting;
78
import net.minecraftforge.fml.relauncher.Side;
89
import net.minecraftforge.fml.relauncher.SideOnly;
910

11+
import java.util.ArrayList;
12+
import java.util.List;
13+
1014
@SideOnly(Side.CLIENT)
1115
public class GuiCharacterListEntry implements GuiListExtended.IGuiListEntry
1216
{
1317
public final CharacterListGuiScreen parent;
1418
public final Character character;
1519
public final Minecraft mc;
16-
public GuiButton guiButton;
20+
public String roles;
1721

1822
protected GuiCharacterListEntry(CharacterListGuiScreen parentScreen, Character character)
1923
{
2024
this.parent = parentScreen;
2125
this.character = character;
2226
this.mc = Minecraft.getMinecraft();
27+
this.roles = "No roles set";
28+
29+
if(character.getRoles().size() > 0)
30+
{
31+
String roleStr = "";
32+
33+
for (String role : character.getRoles())
34+
{
35+
if (!role.isEmpty())
36+
{
37+
roleStr += role + ", " + TextFormatting.RESET;
38+
}
39+
}
40+
41+
if(roleStr.length() >= 4) {
42+
this.roles = roleStr.substring(0, roleStr.length() - 4);
43+
}
44+
}
2345
}
2446

2547
@Override
@@ -32,9 +54,7 @@ public void updatePosition(int slotIndex, int x, int y, float partialTicks)
3254
public void drawEntry(int slotIndex, int x, int y, int listWidth, int slotHeight, int mouseX, int mouseY, boolean isSelected, float partialTicks)
3355
{
3456
this.mc.fontRenderer.drawString(this.character.getName(), x + 3, y + 1, 0xFFFFFF);
35-
this.mc.fontRenderer.drawString("Role 1, Role 2, Role 3", x + 3, y + this.mc.fontRenderer.FONT_HEIGHT + 1, 0x808080);
36-
37-
//this.mc.fontRenderer.drawString(list.get(i), x + 3, y + 12 + this.mc.fontRenderer.FONT_HEIGHT * i, 0x808080);
57+
this.mc.fontRenderer.drawString(this.roles, x + 3, y + this.mc.fontRenderer.FONT_HEIGHT + 1, 0x808080);
3858
}
3959

4060
@Override
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package co.runed.multicharacter.commands;
2+
3+
import co.runed.multicharacter.MultiCharacterMod;
4+
import net.minecraft.command.CommandBase;
5+
import net.minecraft.command.CommandException;
6+
import net.minecraft.command.ICommandSender;
7+
import net.minecraft.entity.player.EntityPlayer;
8+
import net.minecraft.server.MinecraftServer;
9+
import net.minecraft.util.text.TextComponentString;
10+
11+
public class CommandAddRole extends CommandBase
12+
{
13+
@Override
14+
public void execute(MinecraftServer server, ICommandSender sender, String[] params) throws CommandException
15+
{
16+
try {
17+
String playerName = params[0];
18+
String role = params[1];
19+
20+
EntityPlayer player = server.getPlayerList().getPlayerByUsername(playerName);
21+
22+
MultiCharacterMod.getCharacterManager().getActiveCharacter(player).addRole(role);
23+
24+
sender.sendMessage(new TextComponentString("Role '" + role + "' has been added to " + playerName));
25+
}
26+
catch (Exception e) {
27+
sender.sendMessage(new TextComponentString("Error running command."));
28+
}
29+
}
30+
31+
@Override
32+
public String getName() {
33+
return "addrole";
34+
}
35+
36+
@Override
37+
public String getUsage(ICommandSender sender) {
38+
return "command.addrole.usage";
39+
}
40+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package co.runed.multicharacter.commands;
2+
3+
import co.runed.multicharacter.MultiCharacterMod;
4+
import co.runed.multicharacter.character.Character;
5+
import net.minecraft.command.CommandBase;
6+
import net.minecraft.command.CommandException;
7+
import net.minecraft.command.ICommandSender;
8+
import net.minecraft.entity.player.EntityPlayer;
9+
import net.minecraft.server.MinecraftServer;
10+
import net.minecraft.util.text.TextComponentString;
11+
12+
// /removerole <player> <index/role>
13+
public class CommandRemoveRole extends CommandBase
14+
{
15+
@Override
16+
public void execute(MinecraftServer server, ICommandSender sender, String[] params) throws CommandException
17+
{
18+
try {
19+
String playerName = params[0];
20+
String role = params[1];
21+
22+
EntityPlayer player = server.getPlayerList().getPlayerByUsername(playerName);
23+
Character character = MultiCharacterMod.getCharacterManager().getActiveCharacter(player);
24+
25+
boolean success;
26+
if(role.matches("-?\\d+")) {
27+
success = character.removeRole(parseInt(role) - 1);
28+
} else {
29+
success = character.removeRole(role);
30+
}
31+
32+
if(success) {
33+
sender.sendMessage(new TextComponentString(playerName + "'s role has been removed"));
34+
return;
35+
}
36+
37+
sender.sendMessage(new TextComponentString("Invalid role."));
38+
}
39+
catch (Exception e) {
40+
sender.sendMessage(new TextComponentString("Error running command."));
41+
}
42+
}
43+
44+
@Override
45+
public String getName() {
46+
return "removerole";
47+
}
48+
49+
@Override
50+
public String getUsage(ICommandSender sender) {
51+
return "command.removerole.usage";
52+
}
53+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package co.runed.multicharacter.commands;
2+
3+
import co.runed.multicharacter.MultiCharacterMod;
4+
import net.minecraft.command.CommandBase;
5+
import net.minecraft.command.CommandException;
6+
import net.minecraft.command.ICommandSender;
7+
import net.minecraft.entity.player.EntityPlayer;
8+
import net.minecraft.server.MinecraftServer;
9+
import net.minecraft.util.text.TextComponentString;
10+
11+
public class CommandSetRole extends CommandBase
12+
{
13+
@Override
14+
public void execute(MinecraftServer server, ICommandSender sender, String[] params) throws CommandException
15+
{
16+
try {
17+
String playerName = params[0];
18+
int index = parseInt(params[1]);
19+
String role = params[2];
20+
21+
EntityPlayer player = server.getPlayerList().getPlayerByUsername(playerName);
22+
23+
MultiCharacterMod.getCharacterManager().getActiveCharacter(player).setRole(index - 1, role);
24+
25+
sender.sendMessage(new TextComponentString(playerName + "'s role has been set to '" + role + "'"));
26+
}
27+
catch (Exception e) {
28+
sender.sendMessage(new TextComponentString("Error running command."));
29+
}
30+
}
31+
32+
@Override
33+
public String getName() {
34+
return "setrole";
35+
}
36+
37+
@Override
38+
public String getUsage(ICommandSender sender) {
39+
return "command.setrole.usage";
40+
}
41+
}

src/main/resources/assets/multicharacter/lang/en_us.lang

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,8 @@ character.button.select=Select Character
1414
character.button.create=Create New Character
1515

1616
key.categories.multicharacter=Multi Character
17-
key.character.change=Change Character
17+
key.character.change=Change Character
18+
19+
command.setrole.usage=/setrole <player> <index> <role>
20+
command.addrole.usage=/addrole <player> <role>
21+
command.removerole.usage=/removerole <player> <index|role>

0 commit comments

Comments
 (0)