2019-07-30 02:47:49 +00:00
/ *
2020-01-09 03:05:42 +00:00
* Copyright ( c ) 2019 - 2020 GeyserMC . http : //geysermc.org
2019-07-30 02:47:49 +00:00
*
* Permission is hereby granted , free of charge , to any person obtaining a copy
* of this software and associated documentation files ( the " Software " ) , to deal
* in the Software without restriction , including without limitation the rights
* to use , copy , modify , merge , publish , distribute , sublicense , and / or sell
* copies of the Software , and to permit persons to whom the Software is
* furnished to do so , subject to the following conditions :
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software .
*
* THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND , EXPRESS OR
* IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY ,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT . IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM , DAMAGES OR OTHER
* LIABILITY , WHETHER IN AN ACTION OF CONTRACT , TORT OR OTHERWISE , ARISING FROM ,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE .
*
* @author GeyserMC
* @link https : //github.com/GeyserMC/Geyser
* /
2019-08-04 03:24:53 +00:00
package org.geysermc.connector.network.translators.java.scoreboard ;
2019-07-30 02:47:49 +00:00
2020-03-24 04:24:17 +00:00
import java.util.Arrays ;
import java.util.Set ;
2019-12-21 17:35:48 +00:00
import org.geysermc.connector.GeyserConnector ;
2019-08-04 03:24:53 +00:00
import org.geysermc.connector.network.session.GeyserSession ;
import org.geysermc.connector.network.translators.PacketTranslator ;
2020-03-24 04:24:17 +00:00
import org.geysermc.connector.network.translators.Translator ;
2019-09-25 21:52:28 +00:00
import org.geysermc.connector.scoreboard.Scoreboard ;
2020-04-19 09:17:40 +00:00
import org.geysermc.connector.scoreboard.Team ;
2019-09-25 21:52:28 +00:00
import org.geysermc.connector.scoreboard.UpdateType ;
import org.geysermc.connector.utils.MessageUtils ;
2020-03-24 04:24:17 +00:00
import com.github.steveice10.mc.protocol.packet.ingame.server.scoreboard.ServerTeamPacket ;
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet ;
2019-07-30 02:47:49 +00:00
2020-03-24 04:24:17 +00:00
@Translator ( packet = ServerTeamPacket . class )
2019-08-04 03:24:53 +00:00
public class JavaTeamTranslator extends PacketTranslator < ServerTeamPacket > {
2019-07-30 02:47:49 +00:00
2019-08-04 03:24:53 +00:00
@Override
public void translate ( ServerTeamPacket packet , GeyserSession session ) {
2020-04-19 09:17:40 +00:00
GeyserConnector . getInstance ( ) . getLogger ( ) . debug ( " Team packet " + packet . getTeamName ( ) + " " + packet . getAction ( ) + " " + Arrays . toString ( packet . getPlayers ( ) ) ) ;
2019-09-25 21:52:28 +00:00
Scoreboard scoreboard = session . getScoreboardCache ( ) . getScoreboard ( ) ;
2020-04-19 09:17:40 +00:00
Team team = scoreboard . getTeam ( packet . getTeamName ( ) ) ;
2019-09-25 21:52:28 +00:00
switch ( packet . getAction ( ) ) {
case CREATE :
scoreboard . registerNewTeam ( packet . getTeamName ( ) , toPlayerSet ( packet . getPlayers ( ) ) )
. setName ( MessageUtils . getBedrockMessage ( packet . getDisplayName ( ) ) )
2020-04-04 06:27:34 +00:00
. setColor ( packet . getColor ( ) )
2019-09-25 21:52:28 +00:00
. setPrefix ( MessageUtils . getBedrockMessage ( packet . getPrefix ( ) ) )
. setSuffix ( MessageUtils . getBedrockMessage ( packet . getSuffix ( ) ) ) ;
break ;
case UPDATE :
2020-04-19 09:17:40 +00:00
if ( team ! = null ) {
team . setName ( MessageUtils . getBedrockMessage ( packet . getDisplayName ( ) ) )
. setColor ( packet . getColor ( ) )
. setPrefix ( MessageUtils . getBedrockMessage ( packet . getPrefix ( ) ) )
. setSuffix ( MessageUtils . getBedrockMessage ( packet . getSuffix ( ) ) )
. setUpdateType ( UpdateType . UPDATE ) ;
} else {
GeyserConnector . getInstance ( ) . getLogger ( ) . error ( " Error while translating Team Packet " + packet . getAction ( ) + " ! Scoreboard Team " + packet . getTeamName ( ) + " is not registered. " ) ;
}
2019-09-25 21:52:28 +00:00
break ;
case ADD_PLAYER :
2020-04-19 09:17:40 +00:00
if ( team ! = null ) {
team . addEntities ( packet . getPlayers ( ) ) ;
} else {
GeyserConnector . getInstance ( ) . getLogger ( ) . error ( " Error while translating Team Packet " + packet . getAction ( ) + " ! Scoreboard Team " + packet . getTeamName ( ) + " is not registered. " ) ;
}
2019-09-25 21:52:28 +00:00
break ;
case REMOVE_PLAYER :
2020-04-19 09:17:40 +00:00
if ( team ! = null ) {
team . removeEntities ( packet . getPlayers ( ) ) ;
} else {
GeyserConnector . getInstance ( ) . getLogger ( ) . error ( " Error while translating Team Packet " + packet . getAction ( ) + " ! Scoreboard Team " + packet . getTeamName ( ) + " is not registered. " ) ;
}
2019-09-25 21:52:28 +00:00
break ;
case REMOVE :
2020-04-19 09:17:40 +00:00
scoreboard . removeTeam ( packet . getTeamName ( ) ) ;
break ;
2019-09-25 21:52:28 +00:00
}
scoreboard . onUpdate ( ) ;
}
2019-07-30 02:47:49 +00:00
2019-09-25 21:52:28 +00:00
private Set < String > toPlayerSet ( String [ ] players ) {
2020-03-18 21:10:28 +00:00
return new ObjectOpenHashSet < > ( Arrays . asList ( players ) ) ;
2019-07-30 02:47:49 +00:00
}
}