001/*
002 * Trident - A Multithreaded Server Alternative
003 * Copyright 2014 The TridentSDK Team
004 *
005 * Licensed under the Apache License, Version 2.0 (the "License");
006 * you may not use this file except in compliance with the License.
007 * You may obtain a copy of the License at
008 *
009 *    http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018package net.tridentsdk.server.entity.living;
019
020import net.tridentsdk.base.Position;
021import net.tridentsdk.entity.living.Horse;
022import net.tridentsdk.entity.living.Player;
023import net.tridentsdk.entity.types.EntityType;
024import net.tridentsdk.entity.types.HorseType;
025import net.tridentsdk.entity.types.HorseVariant;
026import net.tridentsdk.event.entity.EntityDamageEvent;
027import net.tridentsdk.inventory.Inventory;
028import net.tridentsdk.inventory.Item;
029import net.tridentsdk.server.data.MetadataType;
030import net.tridentsdk.server.data.ProtocolMetadata;
031import net.tridentsdk.server.entity.TridentBreedable;
032import net.tridentsdk.server.player.TridentPlayer;
033
034import java.util.UUID;
035
036public class TridentHorse extends TridentBreedable implements Horse {
037    private volatile int data;
038    private final HorseType breed;
039    private volatile int colorData;
040    private volatile UUID owner;
041    private volatile int temper;
042    private volatile int armorType;
043
044    public TridentHorse(UUID id, Position spawnLocation, HorseType breed) {
045        super(id, spawnLocation);
046
047        this.data = 0;
048        this.breed = breed;
049        this.colorData = 0;
050        this.temper = 0;
051        this.armorType = 0;
052    }
053
054    @Override
055    protected void doEncodeMeta(ProtocolMetadata protocolMeta) {
056        protocolMeta.setMeta(16, MetadataType.INT, data);
057        protocolMeta.setMeta(19, MetadataType.BYTE, (byte) breed.id());
058        protocolMeta.setMeta(20, MetadataType.INT, colorData);
059        protocolMeta.setMeta(21, MetadataType.STRING,
060                (owner == null) ? "" : TridentPlayer.getPlayer(owner).name());
061        protocolMeta.setMeta(22, MetadataType.INT, armorType);
062    }
063
064    @Override
065    public HorseType breed() {
066        return breed;
067    }
068
069    @Override
070    public boolean isGrazing() {
071        return false;
072    }
073
074    @Override
075    public int temper() {
076        return temper;
077    }
078
079    @Override
080    public boolean hasChest() {
081        return false;
082    }
083
084    @Override
085    public HorseVariant variant() {
086        return null;
087    }
088
089    @Override
090    public boolean isSitting() {
091        return false;
092    }
093
094    @Override
095    public Inventory window() {
096        return null;
097    }
098
099    @Override
100    public Item heldItem() {
101        return null;
102    }
103
104    @Override
105    public void setHeldItem(Item item) {
106
107    }
108
109    @Override
110    public boolean isSaddled() {
111        return false;
112    }
113
114    @Override
115    public void setSaddled(boolean saddled) {
116
117    }
118
119    @Override
120    public boolean isTamed() {
121        return false;
122    }
123
124    @Override
125    public UUID owner() {
126        return null;
127    }
128
129    @Override
130    public EntityDamageEvent lastDamageEvent() {
131        return null;
132    }
133
134    @Override
135    public Player lastPlayerDamager() {
136        return null;
137    }
138
139    @Override
140    public EntityType type() {
141        return EntityType.HORSE;
142    }
143}