2019-12-01 00:19:03 +00:00
/ *
2020-01-09 03:05:42 +00:00
* Copyright ( c ) 2019 - 2020 GeyserMC . http : //geysermc.org
2019-12-01 00:19:03 +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
* /
2020-03-06 23:29:11 +00:00
package org.geysermc.connector.entity.living.animal.tameable ;
2019-12-01 00:19:03 +00:00
2020-03-06 23:29:11 +00:00
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata ;
2019-12-01 00:19:03 +00:00
import com.nukkitx.math.vector.Vector3f ;
2020-06-23 00:11:09 +00:00
import com.nukkitx.protocol.bedrock.data.entity.EntityData ;
import com.nukkitx.protocol.bedrock.data.entity.EntityFlag ;
2019-12-01 00:19:03 +00:00
import org.geysermc.connector.entity.type.EntityType ;
2020-03-06 23:29:11 +00:00
import org.geysermc.connector.network.session.GeyserSession ;
2019-12-01 00:19:03 +00:00
2020-03-06 23:29:11 +00:00
public class WolfEntity extends TameableEntity {
2019-12-01 00:19:03 +00:00
2020-10-15 06:54:05 +00:00
private byte collarColor ;
2020-03-06 23:29:11 +00:00
public WolfEntity ( long entityId , long geyserId , EntityType entityType , Vector3f position , Vector3f motion , Vector3f rotation ) {
2019-12-01 00:19:03 +00:00
super ( entityId , geyserId , entityType , position , motion , rotation ) ;
}
2020-03-06 23:29:11 +00:00
@Override
public void updateBedrockMetadata ( EntityMetadata entityMetadata , GeyserSession session ) {
2020-04-19 08:57:37 +00:00
//Reset wolf color
if ( entityMetadata . getId ( ) = = 16 ) {
byte xd = ( byte ) entityMetadata . getValue ( ) ;
boolean angry = ( xd & 0x02 ) = = 0x02 ;
2020-04-19 09:06:11 +00:00
if ( angry ) {
2020-04-19 08:57:37 +00:00
metadata . put ( EntityData . COLOR , ( byte ) 0 ) ;
}
}
2020-06-24 20:40:42 +00:00
// "Begging" on wiki.vg, "Interested" in Nukkit - the tilt of the head
if ( entityMetadata . getId ( ) = = 18 ) {
metadata . getFlags ( ) . setFlag ( EntityFlag . INTERESTED , ( boolean ) entityMetadata . getValue ( ) ) ;
}
2020-04-09 21:53:38 +00:00
// Wolf collar color
// Relies on EntityData.OWNER_EID being set in TameableEntity.java
2020-04-19 09:06:11 +00:00
if ( entityMetadata . getId ( ) = = 19 & & ! metadata . getFlags ( ) . getFlag ( EntityFlag . ANGRY ) ) {
2020-10-15 06:54:05 +00:00
metadata . put ( EntityData . COLOR , collarColor = ( byte ) ( int ) entityMetadata . getValue ( ) ) ;
2020-12-06 19:46:31 +00:00
if ( ! metadata . containsKey ( EntityData . OWNER_EID ) ) {
// If a color is set and there is no owner entity ID, set one.
// Otherwise, the entire wolf is set to that color: https://user-images.githubusercontent.com/9083212/99209989-92691200-2792-11eb-911d-9a315c955be9.png
metadata . put ( EntityData . OWNER_EID , session . getPlayerEntity ( ) . getGeyserId ( ) ) ;
}
2020-03-06 23:29:11 +00:00
}
2020-07-25 16:53:44 +00:00
// Wolf anger (1.16+)
if ( entityMetadata . getId ( ) = = 20 ) {
metadata . getFlags ( ) . setFlag ( EntityFlag . ANGRY , ( int ) entityMetadata . getValue ( ) ! = 0 ) ;
2020-10-15 06:54:05 +00:00
metadata . put ( EntityData . COLOR , ( int ) entityMetadata . getValue ( ) ! = 0 ? ( byte ) 0 : collarColor ) ;
2020-07-25 16:53:44 +00:00
}
2020-03-06 23:29:11 +00:00
super . updateBedrockMetadata ( entityMetadata , session ) ;
}
2019-12-01 00:19:03 +00:00
}