Search in sources :

Example 1 with EntityPainting

use of net.minecraft.entity.item.EntityPainting in project SpongeCommon by SpongePowered.

the class MixinWorld method createEntity.

private Entity createEntity(EntityType type, Vector3d position, boolean naturally) throws IllegalArgumentException, IllegalStateException {
    checkNotNull(type, "The entity type cannot be null!");
    checkNotNull(position, "The position cannot be null!");
    Entity entity = null;
    Class<? extends Entity> entityClass = type.getEntityClass();
    double x = position.getX();
    double y = position.getY();
    double z = position.getZ();
    if (entityClass.isAssignableFrom(EntityPlayerMP.class) || entityClass.isAssignableFrom(MultiPartEntityPart.class)) {
        // Unable to construct these
        throw new IllegalArgumentException("Cannot construct " + type.getId() + " please look to using entity types correctly!");
    }
    net.minecraft.world.World world = (net.minecraft.world.World) (Object) this;
    // Not all entities have a single World parameter as their constructor
    if (entityClass.isAssignableFrom(EntityLightningBolt.class)) {
        entity = (Entity) new EntityLightningBolt(world, x, y, z, false);
    } else if (entityClass.isAssignableFrom(EntityEnderPearl.class)) {
        EntityArmorStand tempEntity = new EntityArmorStand(world, x, y, z);
        tempEntity.posY -= tempEntity.getEyeHeight();
        entity = (Entity) new EntityEnderPearl(world, tempEntity);
        ((EnderPearl) entity).setShooter(ProjectileSource.UNKNOWN);
    }
    // set them is to use the more specialised constructor).
    if (entityClass.isAssignableFrom(EntityFallingBlock.class)) {
        entity = (Entity) new EntityFallingBlock(world, x, y, z, Blocks.SAND.getDefaultState());
    } else if (entityClass.isAssignableFrom(EntityItem.class)) {
        entity = (Entity) new EntityItem(world, x, y, z, new ItemStack(Blocks.STONE));
    }
    if (entity == null) {
        try {
            entity = ConstructorUtils.invokeConstructor(entityClass, this);
            ((net.minecraft.entity.Entity) entity).setPosition(x, y, z);
        } catch (Exception e) {
            throw new RuntimeException("There was an issue attempting to construct " + type.getId(), e);
        }
    }
    if (naturally && entity instanceof EntityLiving) {
        // Adding the default equipment
        ((EntityLiving) entity).onInitialSpawn(world.getDifficultyForLocation(new BlockPos(x, y, z)), null);
    }
    if (entity instanceof EntityPainting) {
        // This is default when art is null when reading from NBT, could
        // choose a random art instead?
        ((EntityPainting) entity).art = EnumArt.KEBAB;
    }
    return entity;
}
Also used : Entity(org.spongepowered.api.entity.Entity) IMixinEntity(org.spongepowered.common.interfaces.entity.IMixinEntity) TileEntity(org.spongepowered.api.block.tileentity.TileEntity) IMixinTileEntity(org.spongepowered.common.interfaces.block.tile.IMixinTileEntity) EntityFallingBlock(net.minecraft.entity.item.EntityFallingBlock) EntityLiving(net.minecraft.entity.EntityLiving) MultiPartEntityPart(net.minecraft.entity.MultiPartEntityPart) EntityArmorStand(net.minecraft.entity.item.EntityArmorStand) EntityLightningBolt(net.minecraft.entity.effect.EntityLightningBolt) EntityEnderPearl(net.minecraft.entity.item.EntityEnderPearl) World(org.spongepowered.api.world.World) IMixinWorld(org.spongepowered.common.interfaces.world.IMixinWorld) EntityPainting(net.minecraft.entity.item.EntityPainting) PositionOutOfBoundsException(org.spongepowered.api.util.PositionOutOfBoundsException) EntityPlayerMP(net.minecraft.entity.player.EntityPlayerMP) BlockPos(net.minecraft.util.math.BlockPos) IMixinBlockPos(org.spongepowered.common.interfaces.util.math.IMixinBlockPos) ItemStack(net.minecraft.item.ItemStack) EntityItem(net.minecraft.entity.item.EntityItem)

Example 2 with EntityPainting

use of net.minecraft.entity.item.EntityPainting in project SpongeCommon by SpongePowered.

the class EntityUtil method refreshPainting.

public static boolean refreshPainting(EntityPainting painting, EntityPainting.EnumArt art) {
    EntityPainting.EnumArt oldArt = painting.art;
    painting.art = art;
    painting.updateFacingWithBoundingBox(painting.facingDirection);
    if (!painting.onValidSurface()) {
        painting.art = oldArt;
        painting.updateFacingWithBoundingBox(painting.facingDirection);
        return false;
    }
    final EntityTracker paintingTracker = ((WorldServer) painting.world).getEntityTracker();
    EntityTrackerEntry paintingEntry = paintingTracker.trackedEntityHashTable.lookup(painting.getEntityId());
    List<EntityPlayerMP> playerMPs = new ArrayList<>();
    for (EntityPlayerMP player : paintingEntry.trackingPlayers) {
        SPacketDestroyEntities packet = new SPacketDestroyEntities(painting.getEntityId());
        player.connection.sendPacket(packet);
        playerMPs.add(player);
    }
    for (EntityPlayerMP playerMP : playerMPs) {
        SpongeImpl.getGame().getScheduler().createTaskBuilder().delayTicks(SpongeImpl.getGlobalConfig().getConfig().getEntity().getPaintingRespawnDelaly()).execute(() -> {
            final SPacketSpawnPainting packet = new SPacketSpawnPainting(painting);
            playerMP.connection.sendPacket(packet);
        }).submit(SpongeImpl.getPlugin());
    }
    return true;
}
Also used : EntityTrackerEntry(net.minecraft.entity.EntityTrackerEntry) EntityTracker(net.minecraft.entity.EntityTracker) ArrayList(java.util.ArrayList) WorldServer(net.minecraft.world.WorldServer) IMixinWorldServer(org.spongepowered.common.interfaces.world.IMixinWorldServer) EntityPlayerMP(net.minecraft.entity.player.EntityPlayerMP) IMixinEntityPlayerMP(org.spongepowered.common.interfaces.entity.player.IMixinEntityPlayerMP) EntityPainting(net.minecraft.entity.item.EntityPainting) SPacketSpawnPainting(net.minecraft.network.play.server.SPacketSpawnPainting) SPacketDestroyEntities(net.minecraft.network.play.server.SPacketDestroyEntities)

Aggregations

EntityPainting (net.minecraft.entity.item.EntityPainting)2 EntityPlayerMP (net.minecraft.entity.player.EntityPlayerMP)2 ArrayList (java.util.ArrayList)1 EntityLiving (net.minecraft.entity.EntityLiving)1 EntityTracker (net.minecraft.entity.EntityTracker)1 EntityTrackerEntry (net.minecraft.entity.EntityTrackerEntry)1 MultiPartEntityPart (net.minecraft.entity.MultiPartEntityPart)1 EntityLightningBolt (net.minecraft.entity.effect.EntityLightningBolt)1 EntityArmorStand (net.minecraft.entity.item.EntityArmorStand)1 EntityEnderPearl (net.minecraft.entity.item.EntityEnderPearl)1 EntityFallingBlock (net.minecraft.entity.item.EntityFallingBlock)1 EntityItem (net.minecraft.entity.item.EntityItem)1 ItemStack (net.minecraft.item.ItemStack)1 SPacketDestroyEntities (net.minecraft.network.play.server.SPacketDestroyEntities)1 SPacketSpawnPainting (net.minecraft.network.play.server.SPacketSpawnPainting)1 BlockPos (net.minecraft.util.math.BlockPos)1 WorldServer (net.minecraft.world.WorldServer)1 TileEntity (org.spongepowered.api.block.tileentity.TileEntity)1 Entity (org.spongepowered.api.entity.Entity)1 PositionOutOfBoundsException (org.spongepowered.api.util.PositionOutOfBoundsException)1