diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..30cf57e
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,10 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Ignored default folder with query files
+/queries/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/libraries/pitiupi.xml b/.idea/libraries/pitiupi.xml
new file mode 100644
index 0000000..4207ae9
--- /dev/null
+++ b/.idea/libraries/pitiupi.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/pitiupi_chat.xml b/.idea/libraries/pitiupi_chat.xml
new file mode 100644
index 0000000..a84f0a3
--- /dev/null
+++ b/.idea/libraries/pitiupi_chat.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/pitiupi_screenCast.xml b/.idea/libraries/pitiupi_screenCast.xml
new file mode 100644
index 0000000..410fe64
--- /dev/null
+++ b/.idea/libraries/pitiupi_screenCast.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/plugins.xml b/.idea/libraries/plugins.xml
new file mode 100644
index 0000000..5d318c9
--- /dev/null
+++ b/.idea/libraries/plugins.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..b1566b1
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..b6bf55e
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/pitiupi.iml b/.idea/pitiupi.iml
new file mode 100644
index 0000000..d6ebd48
--- /dev/null
+++ b/.idea/pitiupi.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pitiupi.chat/nbproject/project.properties b/pitiupi.chat/nbproject/project.properties
index b87aa66..6f8cc9a 100644
--- a/pitiupi.chat/nbproject/project.properties
+++ b/pitiupi.chat/nbproject/project.properties
@@ -47,8 +47,8 @@ javac.modulepath=
javac.processormodulepath=
javac.processorpath=\
${javac.classpath}
-javac.source=25
-javac.target=25
+javac.source=17
+javac.target=17
javac.test.classpath=\
${javac.classpath}:\
${build.classes.dir}
diff --git a/pitiupi.testSocket/.idea/.gitignore b/pitiupi.testSocket/.idea/.gitignore
new file mode 100644
index 0000000..30cf57e
--- /dev/null
+++ b/pitiupi.testSocket/.idea/.gitignore
@@ -0,0 +1,10 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Ignored default folder with query files
+/queries/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/pitiupi.testSocket/.idea/misc.xml b/pitiupi.testSocket/.idea/misc.xml
new file mode 100644
index 0000000..07115cd
--- /dev/null
+++ b/pitiupi.testSocket/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pitiupi.testSocket/.idea/modules.xml b/pitiupi.testSocket/.idea/modules.xml
new file mode 100644
index 0000000..83d481a
--- /dev/null
+++ b/pitiupi.testSocket/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pitiupi.testSocket/.idea/vcs.xml b/pitiupi.testSocket/.idea/vcs.xml
new file mode 100644
index 0000000..6c0b863
--- /dev/null
+++ b/pitiupi.testSocket/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pitiupi/docs/PluginTutorial.md b/pitiupi/docs/PluginTutorial.md
index 0e3026b..9734902 100644
--- a/pitiupi/docs/PluginTutorial.md
+++ b/pitiupi/docs/PluginTutorial.md
@@ -1,42 +1,92 @@
# Como criar plugins para o Pitiupi
-Aqui será discutido os métodos e classes que um desenvolvedor pode ou deve usar para criar um plugin para a plataforma Pitiupi.
+Aqui serão discutidos os métodos e classes que um desenvolvedor pode ou deve usar para criar um plugin para a plataforma Pitiupi.
Alguns deles estarão marcados com um [REF], isso indica que eles estão sendo alterados para a versão 3.0 e deixarão de existir ou vão mudar consideravelmente.
## GUI
-O pitiupi é feito usando a biblioteca Swing do Java, por isso é altamente recomendado que os plugins também a utilizem na hora de criar sua interface gráfica, porém não é obrigatório.
+O Pitiupi é feito usando a biblioteca Swing do Java, por isso é altamente recomendado que os plugins também a utilizem na hora de criar sua interface gráfica, porém não é obrigatório.
+
+## Como tornar o seu plugin visível para o Pitiupi
+
+A busca por plugins é realizada em três etapas pelo pitiupi:
+
+1. Encontra todos os jars em `plugins`.
+2. Verifica o `META-INF` dos jars para saber onde estão as implementações da classe `Plugin`.
+3. Carrega o plugin no sistema.
+
+Em relação ao `META-INF`, ele deve conter um diretório `resources` e dentro dele um arquivo contendo o nome completamente qualificado da classe `Plugin` do pitiupi: `pitiupi.models.Plugin`, por fim dentro desse arquivo você deve colocar o nome completamente qualificado de todas as classes que implementam `Plugin` do seu projeto, um em cada linha.
+
+```
+build/
+ |---->META-INF/resources/pitiupi.models.Plugin
+ |---->MeusPlugins/...
+ |---->MinhasMensagens/...
+ |---->Restante dos .class
+```
+
+
+```
+src/MeusPlugins/MeuPrimeiroPlugin
+src/MeusPlugins/MeuSegundoPlugin
+...
+```
+
+### Dicas
+
+- Faça um makefile que automaticamente mova o META-INF para o build/ quando você compilar uma nova versão caso ele esteja sendo alterado com frequência.
+Ex:
+```
+JAR = ../pitiupi/dist/pitiupi.jar
+BUILD_DIR = build
+META-INF_DIR = src/META-INF
+DIST = dist/mpChat.jar
+
+SOURCES = $(shell find -name "*.java")
+
+all:
+ mkdir -p "$(BUILD_DIR)"
+ mkdir -p "$(dir $(DIST))"
+ javac -cp "$(JAR)" -d "$(BUILD_DIR)" $(SOURCES)
+ cp -r "$(META-INF_DIR)" "$(BUILD_DIR)"
+ jar cf "$(DIST)" -C "$(BUILD_DIR)" .
+
+clean:
+ rm -rf "$(BUILD_DIR)"/*
+```
+
+- Para a versão 3.0 será necessário fazer o mesmo processo para as implementações da classe `Message`, então se quiser deixar preparado para a nova versão adicione `pitiupi.models.Messages.Message` em `resources` e coloque nele todas suas implementações de `Message`, assim como você fez para os de `Plugin`.
## Pitiupi
A classe `Pitiupi` é a interface que o seu plugin vai receber quando for criado, ela fornece os métodos necessários para interagir com a interface gráfica e comunicação para outros peers.
-### sendUdpMulticast(Message message)
+### boolean sendUdpMulticast(Message message)
Envia uma mensagem multicast, retorna `boolean` indicando se teve sucesso.
-### sendUdpUnicast(Message message, InetAddress address)
+### boolean sendUdpUnicast(Message message, InetAddress address)
Envia uma mensagem unicast via udp para o endereço fornecido, retorna `boolean` indicando se teve sucesso.
-### sendTcp(Message message, InetAddress address)
+### boolean sendTcp(Message message, InetAddress address)
Envia uma mensagem unicast via tcp para o endereço fornecido, retorna `boolean` indicando se teve sucesso.
-### [REF] connectTcp(InetAddress address, String senderId, String receiverId)
+### [REF] TcpConnection connectTcp(InetAddress address, String senderId, String receiverId)
Pede uma conexão tcp privada para o seu plugin com outro usuário, para utilizar essa funcionalidade é necessário implementar alguns métodos opcionais em Plugin. Maisinformações serão discutidas na seção TcpConnection.
-### getUserName()
+### String getUserName()
Retorna o nome do usuário conectado
-### getPort()
+### int getPort()
Retorna a porta que o usuário está usando o Pitiupi
-### createMenu(MenuCategory category, Menu menu)
+### void createMenu(MenuCategory category, Menu menu)
Adiciona um menu ao pitiupi, category define em qual das categoria de Menus ele será adicionado: Jogos, Social, Streaming.